網路程式設計本質上是兩台電腦的資料交換。Java 在 java.net 套件提供簡潔 API,搭配 java.io 處理資料流,讓開發者能輕鬆實作 Client-Server 模型。
ServerSocket 綁定埠號(>1024),調用 accept() 等待連線,建立專屬 Socket 通道。Socket 指定伺服器 IP 与埠號發起連線,InetAddress 協助解析位址。雙方透過 getInputStream()、getOutputStream() 取得位元組流,再包裝為 BufferedReader/PrintWriter 處理文字資料。
初版伺服器單執行緒循環處理請求,同一時間僅能服務一個客戶。改進方向:
while(true){ Socket client = server.accept(); ... },但仍為循序處理,客戶需排隊。Thread 或實作 Runnable),將通訊邏輯移入 run(),主執行緒僅負責 accept() 與 start(),實現真正並發服務。public class MultiUser extends Thread {
private Socket client;
public MultiUser(Socket c) { this.client = c; }
public void run() {
try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream())) {
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
out.println("has receive...."); out.flush();
if (str.equals("end")) break;
}
} catch (IOException e) { /* 處理異常 */ }
finally { try { client.close(); } catch (IOException ignored) {} }
}
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(5678);
while (true) new MultiUser(server.accept()).start();
}
}
此架構下,每個客戶擁有獨立執行緒與通訊管道,互不阻塞,充分發揚多核優勢。