本文實例講述了JAVA編程實現TCP網絡通訊的方法。分享給大家供大家參考,具體如下:
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。
由IETF的RFC 793定義,在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。
基于TCP網絡通訊實現的類主要有服務器端的ServerSocket用客戶端的Socket。
通訊流程:
打開服務器,等待客戶端連接-->客戶端連接上服務器-->數據通訊。
代碼實現步驟:
1. 創建服務器端(ServerSocket)對象或客戶端(Socket)對象。
2. 建立起服務器與客戶端連接
3. 通過輸入輸出流進行文件(數據)通訊
4. 通訊結束 ,關閉資源 。
一個簡單的小例子,服務端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public class SocketServer { public static void main(String[] args) { try { // 創建一個服務器ServerSocket,并指定端口號為5120 ServerSocket mServerSocket = new ServerSocket( 5120 ); // 等待客戶端連接 Socket socket = mServerSocket.accept(); // 連接上客戶端后,獲取客戶端輸入流信息 InputStream is = socket.getInputStream(); // 通過獲取緩沖數據方式來讀取文本信息 BufferedReader br = new BufferedReader( new InputStreamReader(is)); // 獲取文本信息 String line; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null ) { sb.append(line); } System.out.println(sb.toString()); socket.shutdownInput(); // 收到客戶端信息后,回復客戶端信息 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write( "收到回復,我是服務端" ); pw.flush(); // 關閉流通常放在finally中操作 os.close(); br.close(); is.close(); pw.close(); socket.close(); mServerSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } |
客戶端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class ClientSocket { public static void main(String[] args) { try { // 創建客戶端Socket,指定主機和端口 Socket mSocket = new Socket( "localhost" , 5120 ); // 通過輸入流向服務器發數據 OutputStream os = mSocket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write( "來自客戶端Socket的數據,你收到了嗎?" ); pw.flush(); mSocket.shutdownOutput(); // 收取服務端的回復信息 InputStream is = mSocket.getInputStream(); // 通過獲取緩沖數據方式來讀取文本信息 BufferedReader br = new BufferedReader( new InputStreamReader(is)); // 獲取文本信息 String line; StringBuffer sb = new StringBuffer(); while ((line = br.readLine()) != null ) { sb.append(line); } System.out.println(sb.toString()); // 關閉流通常放在finally中操作 br.close(); is.close(); pw.close(); os.close(); mSocket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
運行時,要先啟動服務端,然后啟動客記戶端,通常網絡通訊會與多線程交織在一起。
希望本文所述對大家java程序設計有所幫助。