網絡編程本質是兩台計算機間的數據通訊。Java 在 java.net 包提供了簡潔的 API,其中 Socket 是核心編程接口。基本模型為客戶端-服務端:服務端在固定端口監聽,客戶端主動連接,雙方建立連接後通過 I/O 流交換數據。
ServerSocket 綁定端口(端口範圍 1024-65535,避開系統保留端口)。accept() 阻塞等待客戶端連接,返回 Socket 實例。Socket 指定服務端 IP(可用 InetAddress.getLocalHost() 獲取本機)與端口。import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(5678);
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
while (true) {
String str = in.readLine();
System.out.println("收到: " + str);
out.println("has receive...");
out.flush();
if ("end".equals(str)) break;
}
client.close();
}
}
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
Socket server = new Socket(InetAddress.getLocalHost(), 5678);
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter out = new PrintWriter(server.getOutputStream());
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String str = console.readLine();
out.println(str);
out.flush();
if ("end".equals(str)) break;
System.out.println("服務端回應: " + in.readLine());
}
server.close();
}
}
InputStreamReader/OutputStreamWriter 負責編碼轉換。BufferedReader/PrintWriter 提升讀寫效率。java.nio.channels)實現高併發。Java Socket API 封裝了 TCP 通訊細節,使網絡編程變得直觀易懂。掌握基礎模型後,可逐步擴展至多線程、NIO、Netty 等高性能框架,構建健壯的分布式系統。