1)在进程结束之前,套接字似乎没有从LocalEndPoint解除绑定 2)我尝试过另一个问题的解决方案,并尝试等了一会儿 - 无济于事 3)目前我已经尝试过以下方法来摆脱套接字及其连接:
public static void killUser(User victim)
{
LingerOption lo = new LingerOption(false, 0);
victim.connectedSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Linger, lo);
victim.connectedSocket.Shutdown(SocketShutdown.Both);
victim.connectedSocket.Disconnect(true);
victim.connectedSocket.Close();
clients.RemoveAt(victim.ID);
}
4)经过一段谷歌搜索后,我似乎无法取消绑定一个端口,因此如果我有足够数量的连接客户端,我最终会用完端口来监听。
答案 0 :(得分:8)
我怀疑您将连接的客户端的套接字与服务器套接字混淆。
您的服务器套接字是侦听特定端口上的传入连接的服务器套接字。您在该函数中关闭的套接字是通往(可能很多)远程连接之一的管道。
要“取消绑定端口”,您需要关闭/关闭服务器套接字。
更新以清除一些混淆
你应该有一个“服务器”套接字,你打开了.Bind(EndPoint),然后调用.Listen()。这是您要关闭/关闭以“取消绑定”并释放端口以供稍后使用的套接字。
然后,您有多个“客户端”套接字,只要“服务器”套接字接受新连接,就会获得引用。这些都可以毫无问题地绑定到同一个端口。要关闭其中一个连接并断开客户端连接,请执行您现在正在执行的操作。您实际上可以将方法修剪为:
断开连接,其余部分是不必要的。