// 完整建構子
ServerSocket(int port, int backlog, InetAddress bindAddr)
| 參數 | 說明 | 預設值 |
|---|---|---|
| port | 監聽埠號,0 表由 OS 自動分配 | 必填 |
| backlog | 等待佇列最大長度(作業系統提示值) | 50 |
| bindAddr | 綁定特定網卡 IP,null 表所有介面 | null (0.0.0.0) |
accept() 為阻塞式呼叫:
InterruptedIOExceptionSocketExceptionServerSocket.accept() 取得客戶端 SocketInputStream/OutputStream迭代式伺服器若處理耗時請求,後續客戶端將排隊等待。解決方案:
ExecutorService 管理工作執行緒Thread.ofVirtual()volatile boolean running = true;
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
running = false;
try { serverSocket.close(); } catch (IOException ignored) {}
}));
while (running) {
try {
Socket client = serverSocket.accept();
executor.submit(() -> handle(client));
} catch (SocketException e) {
if (!running) break;
throw e;
}
}