Java Socket通信
阿新 • • 發佈:2018-03-11
spa 報文 edr request 關閉 讀取 大量 服務端 net
④ 關閉輸入輸出流、關閉Socket
4、服務器端:
① 創建ServerSocket對象,綁定監聽端口
② 通過accept()方法監聽客戶端請求
③ 連接建立後,通過輸入流讀取客戶端發送的請求信息
④ 通過輸出流向客戶端發送鄉音信息
⑤ 關閉相關資源
1、TCP協議是面向連接的、可靠的、有序的、以字節流的方式發送數據,通過三次握手方式建立連接,形成傳輸數據的通道,在連接中進行大量數據的傳輸,效率會稍低
2、Java中基於TCP協議實現網絡通信的類 客戶端的Socket類 服務器端的ServerSocket類 3、Socket通信的步驟 ① 創建ServerSocket和Socket ② 打開連接到Socket的輸入/輸出流 ③ 按照協議對Socket進行讀/寫操作import java.io.BufferedReader; import java.io.IOException;5、客戶端: ① 創建Socket對象,指明需要連接的服務器的地址和端口號 ② 連接建立後,通過輸出流想服務器端發送請求信息 ③ 通過輸入流獲取服務器響應的信息 ④ 關閉響應資源import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 服務端 * * @author sun * */ public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(10086);//1、創建一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口 Socket socket = null; BufferedReader br = null; PrintWriter pw = null; while (true) { System.out.println("服務端啟動"); socket = serverSocket.accept();// 2、 監聽客戶端連接,程序一直阻塞在這個語句上進行等待 // 3、獲取輸入流,並讀取客戶端信息 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String reqstr = br.readLine(); System.out.println("服務端收到請求報文:" + reqstr); // 4、獲取輸出流,響應客戶端的請求 pw = new PrintWriter(socket.getOutputStream());// 建立一個Socket pw.write("發送報文成功,響應客戶端!"); pw.flush(); // 5、關閉資源;采用倒關原則 pw.close(); br.close(); } } }
/** * 客戶端 * * @author sun * */ public class Client { public static void main(String[] args) throws IOException { System.out.println("我是客戶端"); Socket socket = new Socket("localhost", 10086);// 1、創建客戶端Socket,指定服務器地址和端口 PrintWriter pw = new PrintWriter(socket.getOutputStream()); pw.println("client request"); pw.flush(); InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while ((info = br.readLine()) != null) { System.out.println("我是客戶端,服務端響應:" + info); } // 4、關閉資源 br.close(); is.close(); pw.close(); } }
在寫這個Demo時,遇到過異常,這個異常是java.net.SocketException: Socket is closed,
該異常在客戶端和服務器均可能發生。異常的原因是己方主動關閉了連接後(調用了Socket的close方法)再對網絡連接進行讀寫操作。
參考連接:https://www.cnblogs.com/rocomp/p/4790340.html
Java Socket通信