Java Socket程式設計之TCP程式設計
全套的: https://www.yuque.com/shizhiy...
基礎: https://blog.51cto.com/wangdy/1588379
Java Socket程式設計基礎及深入講解: https://www.cnblogs.com/yiwangzhibujian/p/7107785.html
- TCP協議是面向連線的、可靠的、有序的、以位元組流的方式傳送資料,通過三次握手方式建立連線,形成傳輸資料的通道,在連線中進行大量資料的傳輸,效率會稍低
-
Java中基於TCP協議實現網路通訊的類
- 客戶端的Socket類
- 伺服器端的ServerSocket類
- Socket通訊的步驟
① 建立ServerSocket和Socket
② 開啟連線到Socket的輸入/輸出流
③ 按照協議對Socket進行讀/寫操作
④ 關閉輸入輸出流、關閉Socket
- 伺服器端:
① 建立ServerSocket物件,繫結監聽埠
② 通過accept()方法監聽客戶端請求
③ 連線建立後,通過輸入流讀取客戶端傳送的請求資訊
④ 通過輸出流向客戶端傳送鄉音資訊
⑤ 關閉相關資源
**
/** * 基於TCP協議的Socket通訊,實現使用者登入,服務端 */ //1、建立一個伺服器端Socket,即ServerSocket,指定繫結的埠,並監聽此埠 ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某個埠 //2、呼叫accept()方法開始監聽,等待客戶端的連線 Socket socket = serverSocket.accept(); //3、獲取輸入流,並讀取客戶端資訊 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String info = null; while ((info = br.readLine()) != null) { System.out.println("我是伺服器,客戶端說:" + info); } socket.shutdownInput();//關閉輸入流 //4、獲取輸出流,響應客戶端的請求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write("歡迎您!"); pw.flush(); //5、關閉資源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close();
- 客戶端:
① 建立Socket物件,指明需要連線的伺服器的地址和埠號
② 連線建立後,通過輸出流想伺服器端傳送請求資訊
③ 通過輸入流獲取伺服器響應的資訊
④ 關閉響應資源
//客戶端 //1、建立客戶端Socket,指定伺服器地址和埠 Socket socket =newSocket("localhost",10086); //2、獲取輸出流,向伺服器端傳送資訊 OutputStream os = socket.getOutputStream();//位元組輸出流 PrintWriter pw =newPrintWriter(os);//將輸出流包裝成列印流 pw.write("使用者名稱:admin;密碼:123"); pw.flush(); socket.shutdownOutput(); //3、獲取輸入流,並讀取伺服器端的響應資訊 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(); os.close(); socket.close();
- 應用多執行緒實現伺服器與多客戶端之間的通訊
① 伺服器端建立ServerSocket,迴圈呼叫accept()等待客戶端連線
② 客戶端建立一個socket並請求和伺服器端連線
③ 伺服器端接受苦讀段請求,建立socket與該客戶建立專線連線
④ 建立連線的兩個socket在一個單獨的執行緒上對話
⑤ 伺服器端繼續等待新的連線
//伺服器執行緒處理 //和本執行緒相關的socket Socket socket =null; // public serverThread(Socket socket){ this.socket = socket; } publicvoid run(){ //伺服器處理程式碼 } //============================================ //伺服器程式碼 ServerSocket serverSocket =newServerSocket(10086); Socket socket =null; int count =0;//記錄客戶端的數量 while(true){ socket = serverScoket.accept(); ServerThread serverThread =newServerThread(socket); serverThread.start(); count++; System.out.println("客戶端連線的數量:"+count); }
[連結]()