最大TCP连接到计算机

时间:2009-03-18 11:32:43

标签: .net windows-services tcplistener

我正在.NET中创建一个Windows服务,N个客户端可以连接到该服务。该服务启动TCP侦听器并接受客户端连接。 我面临的问题是我只能打开10个这个服务的连接。 listener :: AcceptTcpClient()方法只接受10个连接,并为第11个连接抛出异常。 客户端应用程序使用System.Net.Sockets.TcpClient类,该服务使用System.Net.Sockets.TcpListener类。

当我尝试在for循环中为此服务建立多个连接时(在建立第10个连接之后),这是我得到的例外:

“无法从传输连接中读取数据:远程主机强行关闭了一个远程连接”

2 个答案:

答案 0 :(得分:4)

这听起来像是你遇到了众所周知的10-connection limit of half-open TCP connections on Windows XP。此限制在XP SP 2中是硬编码的,并且无法在不修补系统的情况下覆盖它,这可能在技术上违反了最终用户许可协议(IANAL)。唉,唉,不打算成为服务器系统。

  

对于Windows XP Professional,   其他计算机的最大数量   允许同时进行   通过网络连接十。这个   限制包括所有运输和   资源共享协议相结合。   对于Windows XP Home Edition,   最大数量的其他计算机   允许同时进行   通过网络连接是五个。这个   限制是同时的数量   来自其他计算机的会话   允许系统托管。这个   限制不适用于使用   附加的管理工具   远程计算机。

答案 1 :(得分:3)

我认为之前给出的答案是有效的。我做了一些研究,似乎没有理由认为TcpClient有任何严格的限制。另一个答案建议在Windows XP中为服务器服务限制10个活动TCP连接,但这仅适用于Microsoft提供的特定应用程序协议(如共享,邮件)。

我确实发现微软在XP SP2中添加了一些限制,并继续通过Vista SP1来限制half-open TCP connections to 10。他们还限制了10 within a single second的新连接数。这些都是为了减少病毒软件的影响。显然这些并不是很成功,因此微软最终决定在Vista SP2及更高版本中删除它们。

这可能是OP的实际问题 - 也许您正试图在客户端中过快地创建这些连接?

正如我在对先前接受的答案的评论中提到的,我个人编写了客户端/服务器软件并且没有出现10的限制问题。当我做测试时,过去使用Windows XP,现在使用Windows 7(应用程序限制现在为20个连接),我可以轻松超过此限制。我刚刚重新测试,并且能够在一台主机(Windows 7 Home Premium)和另一台主机(Windows 7 Enterprise)之间创建> 140个活动/已建立的连接;两个客户端操作系统。这是使用Java,但实际上应该没有区别.NET(我过去也测试过)。