2017-04-16 174 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插座。我们在过去的某些时候看到它高得多。所以是的,你可以很容易地支持几百个客户端,即单个监听端口,,但是:如果你想要支持更多的套接字,那么你就不应该使用每个客户端的广告。非常少的客户。

相关问题