2012-10-26 57 views
0

我應該使用監聽,並在對閱讀等應用程序不同的端口?如果是這樣,爲什麼不一個單一的端口爲聽力和閱讀?不同的端口,用於聽力和閱讀

+0

你說的是TCP或UDP端口?如果使用TCP,那麼您不必擔心,因爲您使用一個套接字(端口)來監聽連接,並且在接受新連接時,您會自動獲得一個帶有新端口的新套接字。 –

+1

不完全。 TCP連接由兩端的IP /端口標識。因此,接受的連接可以在服務器端使用與偵聽套接字相同的IP /端口。見例如在這裏:http://stackoverflow.com/questions/489036/how-does-the-socket-api-accept-function-work –

+0

@JoachimPileborg不想你不行,你得到的*同*當地一個新的TCP套接字端口號。 – EJP

回答

0

如果這是UDP,你套接字綁定到的端口號聽,當你寫,你寫尚未綁定到任何特定的端口(發送並不重要)的插座,所以您可以使用相同的端口進行讀取和寫入,而不會有任何問題。只需將目標IP的端口設置爲您正在監聽的同一端口號即可。我更喜歡這樣做,因爲當我通過Wireshark嗅探流量時,通過查看端口號(而不是查找發送端口和接收端口),我可以識別我的流量(發送和接收)。另一方面,您可能希望能夠分別識別發送和接收,所以這將是不使用相同端口號進行發送和接收的原因。

如果這有點像一個多播或廣播基於「對等發現」協議,您將需要發送和接收端口是相同的。在這種情況下,一個對等體既是同一數據的發送者又是接收者,因此對於讀取和寫入的所有對等端,端口號必須相同。如果發送和接收的端口號不同,則會發送數據但從未收到數據。

1

如果你談論的是TCP,你沒有得到的選擇:接受套接字使用相同的本地端口作爲偵聽端口(和出站端口必須使用不同的端口,如果需要的話)。如果你在談論UDP,沒有理由使用多個套接字,所以沒有機會使用多個端口。所以兩種情況下的答案都是一樣的:使用一個端口。

+0

EJB,你是對的。非常感謝您的糾正。 +1 – shevchyk