【问题标题】:How many clients can connect to one TCP Port一个 TCP 端口可以连接多少个客户端
【发布时间】:2017-09-12 10:07:31
【问题描述】:

我有一个 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);

谢谢。

【问题讨论】:

    标签: c# sockets tcp


    【解决方案1】:

    TCP 连接由四个参数表征 - 源 IP 地址和端口以及目标 IP 地址和端口。如果这四个是唯一的,则不会产生混淆。

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


    如果您正在考虑将 anything 分配给每个连接的客户端(除了套接字和一些缓冲区),那么您可能做错了什么。不要将任何独家资源奉献给客户。

    【讨论】:

      【解决方案2】:

      参见:C10k problem

      请注意,当您使用侦听器端口时,在幕后您最终会在侦听器移交后使用临时端口来建立已建立的连接 - 但从连接客户端的角度来看,没关系 - 侦听器端口仍然是所有最终套接字的单一入口点。

      FWIW:在 Stack Overflow 上驱动实时更新的 web-sockets 服务器当前平均每个端口 14,500 个套接字,每个服务实例 3 个端口,9 个服务实例,总共大约392,000 个插槽。我们在过去的某些时候看到它要高得多。所以是的,您可以通过单个侦听器端口轻松支持数百个客户端,但是:您想要支持的套接字越多,它就越重要,如果您绝对不应该为每个客户端使用 theads '正在处理的客户数量非常少。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-30
          • 2015-04-20
          • 2013-02-17
          • 1970-01-01
          • 2015-08-15
          • 2011-04-26
          • 1970-01-01
          • 2014-09-29
          相关资源
          最近更新 更多