2015-11-01 190 views
0

如果一臺機器正在運行,某些端口上偵聽的服務器應用程序(比如9999),並在同一臺機器幾個客戶端應用程序打開一個TcpClient的(本地主機,9999)連接到同一臺服務器應用程序,會發生什麼? 這會造成某種碰撞嗎?在同一臺機器上的多個TcpClients作爲服務器

+0

的可能的複製[兩個應用程序可以收聽到相同的端口?](http://stackoverflow.com/questions/1694144/can-two-applications-listen-to-the-same -port) – Cjen1

+0

@Micky,我簡直不明白這是如何工作的,包怎麼不混合? – LimS

回答

0

在C#中TcpListener正在等待來自AcceptSocketAcceptTcpClient的客戶端的傳入連接。在成功的連接上,您可以獲得一個Socket對象,該對象可用於與由客戶端IP標識的特定客戶端通信。如果與客戶端的連接在另一個線程中處理,而不是AcceptSocket,則您的服務器應用程序可以同時與多個客戶端通信。例如服務器循環僅調用Accept,並直接將Socket移交給某個處理程序線程/任務。一般而言,對於傳入連接,您知道客戶端IP地址(和端口),並基於此連接可以將連接/數據複用到相應的套接字。 一個好的和完整的答案,但非C#特定是在這裏 TCP : two different sockets sharing a port?

在客戶端選擇一個隨機端口爲傳出連接。這由套接字/網絡系統完成

在互聯網範例中,端口號介於0和65535之間,並且由客戶端主機上運行的傳輸層軟件隨機選擇。這些被稱爲臨時端口(範圍從1024到49151)。

Applied C#.NET Socket Programming

+0

我的問題是,當一切運行在同一臺機器上時會發生什麼。 – LimS

+0

我的問題是,當一切都在同一臺機器,服務器和客戶端上會發生什麼。所有的都有相同的IP。該服務器監聽指定的端口,並作爲客戶端端口,我不知道,如果隨機挑輸出端口隱含與否。如果沒有,那麼我不明白他們怎麼可能有不同的插座。 – LimS

+0

是你的權利,我認爲底層OS插座系統是選擇隨機outports爲客戶 –

相關問題