首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 編程那些事兒 103:TCP 網絡編程基礎——Socket 與 ServerSocket 完整實現指南

     編輯:Java 相關知識

13.2.3 TCP 編程

TCP 方式保持連接,類比打電話:撥號一次(建立連接)即可多次通話(多次傳輸)。傳輸可靠,底層自動重發確保送達。Java 提供良好支持:java.net.Socket 代表客戶端連接,java.net.ServerSocket 代表服務端連接。高度封裝簡化開發,但難以深入底層(如嗅探、IP 包結構)。

客戶端編程三步驟

1. 建立連接

創建 Socket 對象,指定服務端 IP 與端口:

Socket socket1 = new Socket("192.168.1.103", 10000);
Socket socket2 = new Socket("www.sohu.com", 80);

底層連接細節透明。網絡不通或服務端未啟動會拋出異常。

2. 交換數據

從連接獲取輸入/輸出流,遵循「請求-響應」模型:先寫出流發送,再讀入流接收回饋。可嵌套裝飾流便利操作。

OutputStream os = socket1.getOutputStream();
InputStream is = socket1.getInputStream();

3. 關閉連接

socket1.close();

簡單客戶端示例

發送 "Hello" 並打印回饋:

package tcp;
import java.io.*;
import java.net.*;

public class SimpleSocketClient {
public static void main(String[] args) {
Socket socket = null;
InputStream is = null;
OutputStream os = null;
String serverIP = "127.0.0.1";
int port = 10000;
String data = "Hello";
try {
socket = new Socket(serverIP, port);
os = socket.getOutputStream();
os.write(data.getBytes());
is = socket.getInputStream();
byte[] b = new byte[1024];
int n = is.read(b);
System.out.println("服務器回饋:" + new String(b, 0, n));
} catch (Exception e) { e.printStackTrace(); }
finally {
try { is.close(); os.close(); socket.close(); } catch (Exception e2) {}
}
}
}

編譯運行:javac -d . SimpleSocketClient.java → java tcp.SimpleSocketClient。搭配下文服務端輸出:服務器回饋:Hello。

服務端編程四步驟

1. 監聽端口

ServerSocket ss = new ServerSocket(10000);

監聽本機 10000 端口。端口被佔用會拋異常。

2. 獲得連接

Socket socket = ss.accept();

阻塞方法,等待客戶端連接。連接到達時建立對應 Socket,釋放服務端端口繼續監聽。類比公司前台:客戶到達 → 前台通知對應人員 → 前台繼續接待其他客戶。每個連接佔用一個服務端端口,TCP 最大並發 65535。

3. 交換數據

獲得的 Socket 與客戶端同樣,但順序相反:先讀入流接收客戶端數據,邏輯處理後寫出流發送回饋。

4. 關閉連接

ss.close();

Echo 服務端示例

功能:原樣返回客戶端發送內容。

package tcp;
import java.io.*;
import java.net.*;

public class SimpleSocketServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream os = null;
InputStream is = null;
int port = 10000;
try {
serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
is = socket.getInputStream();
byte[] b = new byte[1024];
int n = is.read(b);
System.out.println("客戶端發送內容為:" + new String(b, 0, n));
os = socket.getOutputStream();
os.write(b, 0, n);
} catch (Exception e) { e.printStackTrace(); }
finally {
try { os.close(); is.close(); socket.close(); serverSocket.close(); } catch (Exception e) {}
}
}
}

監聽 → 接受連接 → 讀取輸出 → 回饋 → 關閉。編譯運行命令同客戶端。此示例奠定 TCP 基礎,後續將深入探討進階問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved