「UDP 連好後給對方一個端口號,用來建 TCP 傳數據,來一個給一個,需不需要多線程?」
listen() 綁定 **固定端口**(如 8080),accept() 返回**新 socket**,內核自動處理併發,無需應用層分配端口。connect() 時內核自動選擇**臨時端口**(ephemeral port,範圍 32768-60999),無需手動指定。// 服務端:單端口監聽,多線程/IO多路復用處理併發
ServerSocket server = new ServerSocket(8080);
while (true) {
Socket client = server.accept(); // 阻塞直到新連接
new Thread(() -> handle(client)).start(); // 或提交線程池
}
// 客戶端:直接連固定端口
Socket socket = new Socket("server_ip", 8080);
// 發送/接收數據
「來一個給一個」天然適合**線程池 + 隊列**:
ExecutorService pool = Executors.newFixedThreadPool(50);
while (true) {
Socket client = server.accept();
pool.submit(() -> {
try (client) { handle(client); }
catch (IOException e) { log.error(e); }
});
}
避免「每連接一線程」無限制創建導致 OOM。