【问题标题】:Max TCP Connections to a machine到机器的最大 TCP 连接数
【发布时间】:2010-04-08 13:12:56
【问题描述】:

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

这是我尝试在 for 循环中建立多个连接到此服务时遇到的异常(在建立第 10 个连接之后):

“无法从传输连接读取数据:现有连接被远程主机强制关闭”

【问题讨论】:

    标签: .net windows-services tcplistener


    【解决方案1】:

    这听起来像是您遇到了著名的10-connection limit of half-open TCP connections on Windows XP。从 XP SP 2 开始,此限制是硬编码的,除了修补您的系统之外,无法覆盖它,这可能在技术上违反您的最终用户许可协议 (IANAL)。唉,XP 并不是一个服务器系统。

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

    【讨论】:

    • 如果我使用 Windows Server 2003 等服务器操作系统会怎样?
    • 服务器操作系统上不应存在限制。服务器操作系统旨在(并且应该)接受许多连接。
    • 但是当我在 Windows Server 2003 上运行我的服务并尝试连接它时,我遇到了同样的错误。
    • 此限制仅适用于某些使用 TCP 的 MS 应用程序协议(邮件、共享等)。这不是套接字级别 TCP 连接的一般限制。也许 .NET TcpClient 类也应用了这个限制......使用不同库集的原因?我知道情况并非如此,因为我经常在 XP 和现在的 Windows 7 Home/Ultimate 下测试非 .NET 程序,其中限制为 20,但我的服务器和客户端应用程序已经能够建立 100 个与/来自相同的连接主机。
    • @Richard:为什么会限制出站连接? XP 是客户端操作系统,因此应允许根据需要与服务器建立尽可能多的套接字连接。现在,MS 确实为半开 TCP 连接创建了一个限制,也限制在 10 个(他们显然已经在 Vista SP2 和更高版本的windowsbbs.com/general-discussions/… 中停止了此策略),但这与限制已建立的连接不同。也许那时 OP 中的服务器没有足够快地完成对连接的接受。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2023-03-07
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 2010-12-10
      • 2011-02-18
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多