有多少客户端可以连接到一个TCP端口

时间:2017-04-16 18:15:02

标签: c# sockets tcp

我在c#windows窗体中有一个应用程序,通过它可以在几秒钟内通过网络摄像头传输照片。照片数据被发送到侦听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);

感谢。

3 个答案:

答案 0 :(得分:4)

TCP连接的特征在于四个参数 - 源IP地址和端口以及目标IP地址和端口。如果这四个是独一无二的,那么就不会产生混淆。

鉴于源是实际分配了唯一地址的机器(更可能是IPv6)或者是通过NAT设备进行隧道传输(因此是已签名的唯一源端口),因此无需在服务器端执行任何操作。

如果您正在考虑为每个连接的客户端(超出套接字和一些缓冲区)分配任何,那么您可能做错了什么。不要将任何专有资源专用于客户端。

答案 1 :(得分:2)

请参阅:C10k problem

请注意,当您使用侦听器端口幕后时,您最终会在侦听器移交后使用临时端口建立连接 - 但来自连接客户端&# 39; s透视,这并不重要 - 监听器端口仍然是所有最终套接字的单一入口点。

FWIW:在Stack Overflow 当前上驱动实时更新的Web套接字服务器平均每个端口14,500个套接字,每个服务实例3个端口,9个服务实例,总计约392,000个插座。我们在过去的某些方面看到它要高得多。所以,是的,您可以轻松支持几百个客户端或单个侦听器端口,但是:您想要支持的套接字越多越不平凡,并且您绝对不应该为每个客户端使用theads如果你要经过极少数的客户。

答案 2 :(得分:1)

不要担心您可以在同一端口上侦听多个套接字,因此多个客户端可以在同一端口上进行通信。

例如,您可能知道当您在网站上访问时,您正在连接到端口80上的服务器(或443 for https),以及...幸运的是,一个网站可以被多个客户端访问,和所有在同一个港口! ;)