標籤:成功 local www. image host 傳輸資料 bsp 握手 void
1、TCP協議是連線導向的、可靠的、有序的、以位元組流的方式發送資料,通過三向交握方式建立串連,形成傳輸資料的通道,在串連中進行大量資料的傳輸,效率會稍低
2、Java中基於TCP協議實現網路通訊的類
用戶端的Socket類
伺服器端的ServerSocket類
3、Socket通訊的步驟
① 建立ServerSocket和Socket
② 開啟串連到Socket的輸入/輸出流
③ 按照協議對Socket進行讀/寫操作
④ 關閉輸入輸出資料流、關閉Socket
4、伺服器端:
① 建立ServerSocket對象,綁定監聽連接埠
② 通過accept()方法監聽用戶端請求
③ 串連建立後,通過輸入資料流讀取用戶端發送的請求資訊
④ 通過輸出資料流向用戶端發送鄉音資訊
⑤ 關閉相關資源
import java.io.BufferedReader;import java.io.IOException;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(); } }}
5、用戶端:
① 建立Socket對象,指明需要已連線的服務器的地址和連接埠號碼
② 串連建立後,通過輸出資料流想伺服器端發送請求資訊
③ 通過輸入資料流擷取伺服器響應的資訊
④ 關閉響應資源
/** * 用戶端 * * @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通訊