2017-04-16 208 views
0

我有一個應用程序在C#窗口窗體,我通過它流幾秒鐘間隔的網絡攝像頭拍攝的照片。照片數據被髮送到偵聽TCP端口的服務器。有多少客戶端可以連接到一個TCP端口

我的問題是,如果這個應用程序安裝在數百臺計算機上,是否有問題在單個端口上偵聽,或者我應該爲每個客戶端分配一個不同的端口?請記住,照片會在每隔幾秒後發送一次。

這是我的服務器監聽器的代碼。

   Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       socket.Bind(new IPEndPoint(IPAddress.Parse("some ip"),5001)); 

       Task.Factory.StartNew(() => 
       { 
        socket.Listen(500); 
        //socket listening code. 

       }, TaskCreationOptions.LongRunning); 

謝謝。

回答

1

不要擔心,您可以在同一個端口上監聽多個套接字,因此多個客戶端可以在同一個端口上進行通信。

例如,您可能知道,當您在網站上訪問時,您正在連接到端口80(或https的443)上的服務器,那麼......幸運的是,一個網站可以被多個客戶端訪問,並在同一個端口上! ;)

3

TCP連接具有四個參數 - 源IP地址和端口以及目標IP地址和端口。只要這四個是獨一無二的,就不會出現混淆。由於源是機器實際分配的唯一地址(更可能是IPv6)或通過NAT設備(因此是唯一的源端口)進行隧道傳輸,所以不需要在服務器端進行任何操作。


如果你想分配什麼給每個連接的客戶端的(超出插座和一些緩衝區),你可能會做錯事。不要將任何專屬資源奉獻給客戶。

2

參見:C10k problem

注意,當您使用監聽端口,你最終使用臨時端口用於建立連接監聽器已經拱手後的幕後 - 從連接客戶端的角度但,一點不問題 - 聽衆端口仍然是所有最終套接字的單一入口點。

FWIW:這裏驅動堆棧溢出實時更新的網絡套接字服務器當前平均每口14500座,每服務實例3個端口,9個服務實例,總計約392000插座。我們在過去的某些時候看到它高得多。所以是的,你可以很容易地支持幾百個客戶端,即單個監聽端口,,但是:如果你想要支持更多的套接字,那麼你就不應該使用每個客戶端的廣告。非常少的客戶。