C# -- TcpListener.Start() 导致 SocketException,并显示消息“每个套接字地址只有

本文关键字:消息 套接字 地址 显示 Start TcpListener SocketException 导致 | 更新日期: 2023-09-27 18:36:10

我有一个服务,当它即将启动时,它会在TcpListener实例上调用Start()方法。 此侦听器使用的端口不常见,并且不知道任何其他服务都在使用。 很少在一分钟左右的时间内遇到奇怪的错误。 在一分钟内,服务(失败时立即重新启动)在以下异常时背靠背崩溃:

   SocketException
   at System.Net.Sockets.Socket.DoBind(System.Net.EndPoint, System.Net.SocketAddress)
   at System.Net.Sockets.Socket.Bind(System.Net.EndPoint)
   at System.Net.Sockets.TcpListener.Start(Int32)
   at MyTestServer.Server.StartListening()

异常消息如下:

Only one usage of each socket address (protocol/network address/port) is normally permitted

本文建议我遇到端口耗尽,我应该调整注册表以修改 WinSock 的超时和端口范围值。 这一切都很好,但我只有(或期望有)50-100个客户端连接。 我怎么可能用完端口? 机器人和端口扫描程序?

C# -- TcpListener.Start() 导致 SocketException,并显示消息“每个套接字地址只有

这可能不像那篇帖子中那样是端口耗尽。 他们正在与WCF(类似于TCPClient)连接。 您正在绑定到 TCP 端口并等待连接。 这并不完全是一回事。 您正在绑定到特定的 TCP 端口号。当您收到此消息时,窗口(正确与否)认为它正在使用中。 Windows 报告另一个进程已绑定到该端口,因此您无法绑定。 您可以有 2 个进程尝试使用该端口并遇到此问题,因此 50-100 的数字不是问题。

要么您在其他地方导致此问题,

要么有其他应用程序导致此问题。

如果服务遇到问题并且在没有调用TCPListener.Stop()的情况下死亡,则服务将重新启动自身,它将无法绑定到端口,因为Windows可能不知道该过程已完成。

您必须发布更多详细信息才能进一步了解它。