当试图启动一个tcpListener后停止它,“地址已经在使用”

我开始这个tcpListener到端口3000上的任何IP,所以在我closures我的popup窗口运行这个方法我打电话tcpListener.Stop()。 之后,当我再次重复使用我得到了这个exeption“地址已经在使用”,所以即时通讯思考如何清理地址或类似的东西,所以我可以开始再听一遍?

tcpListener = new TcpListener (IPAddress.Any, 3000); 

这是代码。

无论如何,我已经试图清理那扇门,但是没有奏效,tcplistener没有任何方法可以清除这个问题。

任何意识?

我不确定你的问题,但是在你开始再听之前,你是否closures了听众?

我认为这个例外是因为你想听一个储存的端口而产生的。 尝试closures监听器,然后再开始在端口3000上进行监听。

 tcpListener.Close(); 

贪婪,不好

进入的好习惯是使用关键字,它将在完成时自动closures连接。 例如:

 using (TcpClient tcpClient = new TcpClient()) { //operations tcpClient.Close(); } 

如果您需要强制释放套接字,您可以设置SO_REUSEADDR套接字选项。 绑定到监听端口之前,您需要执行此操作。

 SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);