private void StopListening() { try { listener.Shutdown(SocketShutdown.Both); listener.Close(); } catch (Exception ex) { // Handle exception } }
一个可能的解决方案是使用不同的IP地址和端口号。可以考虑使用通常不被占用的端口号,并尝试使用IPv6而不是IPv4地址。
最后,还可以尝试增加socket的重用参数,让系统能够重用先前关闭的端口。在应用程序启动时添加以下代码:
var addr = new IPAddress(new byte[] { 0, 0, 0, 0 }); var ep = new IPEndPoint(addr, port);
var listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); listener.Bind(ep); listener.Listen(100);
上述代码中,“port”是要使用的端口号。注意,此解决方案不是唯一的解决方案,因为对socket重用的设置可能会影响其他正在运行的应用程序。