3

我有一个服务,它即将调用 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 个客户端连接。我怎么可能用完端口?机器人和端口扫描器?

4

1 回答 1

4

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

要么您在其他地方导致此问题,要么有其他应用程序导致此问题。

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

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

于 2012-06-04T15:20:38.913 回答