TCP 協議提供可靠的字節流傳輸服務,Java 通過 ServerSocket(服務端)和 Socket(客戶端)實現網絡通信。本文詳細解析核心 API、構造方法、常用操作,並提供可運行的完整代碼示例。
ServerSocket 監聽指定端口,等待客戶端連接請求。主要構造方法:
ServerSocket():創建非綁定套接字ServerSocket(int port):綁定指定端口ServerSocket(int port, int backlog):指定端口和連接隊列長度ServerSocket(int port, int backlog, InetAddress bindAddr):綁定特定 IP 地址核心方法 accept() 會阻塞直到有客戶端連接,返回用於通信的 Socket 對象。其他常用方法:bind()、close()、getInetAddress()、isBound()、isClosed()。
Socket 代表通信端點。常用構造方法:
Socket(String host, int port):連接指定主機和端口(最常用)Socket(InetAddress address, int port):使用 InetAddress 對象Socket():創建未連接套接字,後續調用 connect()核心方法:connect() 發起連接、close() 關閉連接、getInputStream()/getOutputStream() 獲取流進行數據交換。
package network;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(9657)) {
System.out.println("服務端啟動,監聽端口 9657...");
while (true) { // 循環接受多個客戶端
Socket client = server.accept();
System.out.println("客戶端連接:" + client.getInetAddress());
// 實際項目中應交給線程池處理
new Thread(() -> handleClient(client)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void handleClient(Socket client) {
try (client) {
// 讀寫邏輯...
} catch (IOException e) {
e.printStackTrace();
}
}
}
package network;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try (Socket client = new Socket("127.0.0.1", 9657)) {
System.out.println("已連接到服務端");
// 發送/接收數據邏輯...
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
while 循環,只能處理一個客戶端。生產環境必須使用線程池或 NIO 非阻塞模型netstat -an 查看端口佔用,ipconfig/all 查看 IP 配置掌握 ServerSocket/Socket API 是 Java 網絡編程的基石。實際項目中建議使用 Netty 等高性能網絡框架,但在理解底層原理時,原生 API 學習不可或缺。