循序處理請求,處理完一個再接下一個。簡單但無法應付並發,僅適合教學或極低負載場景。
主執行緒負責 accept(),每新連線派生工作執行緒處理。商業級伺服器皆採此架構。
// 並發伺服器骨架
while (true) {
Socket client = serverSocket.accept();
new Thread(() -> handleClient(client)).start();
}
new DatagramSocket(4545)new DatagramSocket()DatagramPacket 收發byte[] buf = new byte[512];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); // 阻塞直到收到資料
InetAddress addr = InetAddress.getByName("target.host");
int port = 1234;
byte[] data = "message".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, addr, port);
socket.send(packet);
| 方法 | 用途 | 回傳 |
|---|---|---|
| getByName(host) | 解析主機名,回傳第一個 IP | InetAddress |
| getAllByName(host) | 解析主機名,回傳所有 IP | InetAddress[] |
| getLocalHost() | 取得本機位址 | InetAddress |
所有方法均為 static,且可能拋出 UnknownHostException。