2011-07-20 38 views
2

我正在開發一個客戶端服務器應用程序。 當我多次運行相同的客戶端時,服務器僅從一個接收數據並阻止其他數據。 在這裏,我的問題是,從一個客戶端在同一端口上建立多個連接是否有效?相同的客戶端可以有多個連接到服務器?

回答

2

是的,你可以。這完全取決於如何編寫服務器端代碼。通過accept()接受客戶端連接後,您可以fork()獨立的進程,或者可以保存accept()返回的所有套接字描述符,並通過select()處理所有套接字描述符。

所以是的,從同一個客戶端連接到同一端口是有效的。客戶端將使用不同的源端口,因此四元組(src_ip,src_port,dst_ip,dst_port)保持唯一。

+0

我在每次接受客戶端後創建一個新線程。如果我從同一臺機器上運行多個客戶機,服務器會爲每個客戶機創建線程。但服務器只接收來自最新創建的客戶機的數據。如果同時發送,它不會從其他人接收數據。我發現所有的客戶端都使用相同的套接字號碼。這種預期的行爲是什麼? – Nipun

+0

不,每次從accept()返回都會給你一個新的套接字文件描述符。 – jman

+0

在服務器端調用Accept,服務器獲取不同的套接字,但所有客戶端都獲得相同的套接字號。我想這不是預期的行爲。 – Nipun

相關問題