2016-08-08 39 views
0

我正在編寫處理來自兩臺服務器的數據流的客戶端代碼A & B.所有三個節點位於同一本地子網上。我試圖創建如下所述定義的兩個套接字。爲什麼我不能連接兩個插座?

插座描述= [本地/客戶端IP]:[本地/客戶端端口]:[遠程/服務器IP]:[遠程/服務器端口]

插座連接到一個參考:[192.168.40.10]: [50002]:[192.168.40.60]:[50002]

插座連接到B:[192.168.40.10]:[50002]:[192.168.40.61]:[50002]

當我嘗試打開第二個套接字,我得到一個例外,即「每個套接字地址aka協議/網絡地址/端口只能使用一次」。我想我可以定義一個不同的套接字,因爲即使本地IP地址和端口號相同,遠程IP地址也是不同的。我別無選擇,只能通過同一個套接字使用兩個數據流嗎?

+0

當你是客戶,見好就收LocalPort屬性空。 Windows會選擇一個免費的。只有當您將套接字設置爲偵聽模式時,localport纔是必需的。 –

+0

我想我需要配置兩臺服務器(因爲我有這種能力)使用目標ip 192.168.40.10並設置每個服務器使用一個唯一的目標端口。然後我可以打開兩個在客戶端的兩個線程上運行的套接字,並從每個服務器流接收數據包。這使我可以重複使用我編寫的相當數量的代碼來處理單個流。 –

回答

2

您不能同時使用本機的同一本地端口兩次。您可以在本地機器上打開另一個套接字(使用另一個端口號,例如50003),並在[192.168.40.61]:[50002]上連接到遠程套接字。

+0

感謝您的澄清。我一直在閱讀一些人將插座標識描述爲包括遠程IP地址。顯然不是這樣。 –

1

您正在使用相同的TCP端口[50002]進行連接以形成兩個不可能的不同連接。您必須使用不同的端口才能擁有兩個獨立的套接字連接。

當你談論識別兩個連接獨特,它的推移IP + PORT