c# - 高性能C# TCP服务器问题: No connection could be made because the target machine actively refused it

标签 c# exception tcp connection

我根据您的建议开发了一个TCP服务器:High performance TCP server in C#

它基于异步模式。

我还开发了一个压力测试应用程序来测试它的性能。我的服务器可以从我的压力测试应用程序并行获得数千个连接,可以解析数据并将其保存到我的数据库中。

当我对我的服务器施加压力时,我可以从我的服务器收到“System.Net.Sockets.SocketException”无法建立连接,因为目标机器主动拒绝它“错误,所以我必须重新连接它。如果我测试它有 5000 个并发连接,由于这个问题,我必须再次尝试连接 10-20% 的连接,如果我用 10K 并发连接测试它,它可能是 30-40%。有时它可能 - 很少 - 更多, 超过 50%。它似乎无法处理连接接受:我从我的压力测试中尽可能多地建立新连接——大约 120 个连接/秒。

那么,是什么导致了这种异常呢?如何处理?在服务器端实现中要做什么来避免这个问题?如何调整 TCP 连接接受?

提前致谢!

最佳答案

您可能时不时地用完可用端口。您可以使用 SysInternals 的 TcpView 实用程序轻松查看它。

在 Windows 上,当您释放端口时,它不会立即进入可用状态,而是会在一段时间内处于 TIME_WAIT 状态。在离开此状态之前,任何应用程序都不能使用此端口。时间延迟、最大端口数和可用端口范围都因操作系统而异,XP vs Win7 vs Win2008 Server。

有两个注册表项可以减少这个时间间隔: HKLM/System/CurrentControlSet/Services/Tcpip/Parameters/TCPTimedWaitDelay

并增加应用程序可以打开的最大端口数: HKLM/System/CurrentControlSet/Services/Tcpip/Parameters/MaxUserPort

编辑:MaxFreeTcbs 似乎是可以提供帮助的第三种设置(我还没有尝试过),在 this TechNet article 中提到。其中有更多关于追踪奇怪的网络问题的建议。 HTH.

关于c# - 高性能C# TCP服务器问题: No connection could be made because the target machine actively refused it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236890/

相关文章:

c# - 绑定(bind) Canvas 上元素的位置

c# - 如何从 URL 解析 Windows Phone 8 中带有图像的 Json 数据?动态数据

c# - 如何跨 MVC 站点共享通用样式信息(css、图像等)?

Android,ListView IllegalStateException : "The content of the adapter has changed but ListView did not receive a notification"

java - 使用Java的TCP或UDP

linux - 给定一个已建立的从客户端到服务器的 tcp 连接,第二个是否在没有服务器显式调用 accept 的情况下得到解决?

java - 基本 Netty 演示无法同时处理 TCP 和 UDP 套接字

c# - NavigationController 颜色和左键

python - 如何捕获 ctypes 中抛出的异常?

c++ - - C++ - 使用计时器线程启动异常,精度 ms