如何以编程方式"解除绑定"套接字?

rya*_*894 3 c# sockets shutdown ports unbind

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);  
    }  
Run Code Online (Sandbox Code Playgroud)

4)经过一段谷歌搜索后,我似乎无法取消绑定端口,因此如果我有足够数量的连接客户端,我最终会用完端口来监听.

Sap*_*pph 8

我怀疑您将连接的客户端的套接字与服务器套接字混淆.

您的服务器套接字是侦听特定端口上的传入连接的服务器套接字.在该函数中关闭的套接字是通向(可能很多)远程连接之一的管道.

要"取消绑定端口",您需要关闭/关闭服务器套接字.

更新以清除一些混乱

您应该有一个"服务器"套接字,您打开.Bind(EndPoint),然后调用.Listen().这是您想要关闭/关闭以"取消绑定"并释放端口以供稍后使用的套接字.

然后,您有多个"客户端"套接字,只要"服务器"套接字接受新连接,就会获得引用.这些都可以毫无问题地绑定到同一个端口.要关闭其中一个连接并断开客户端连接,请执行您现在正在执行的操作.您实际上可以将方法修剪为:

  • 关掉
  • 从列表中删除

断开连接,其余部分是不必要的.

  • 你应该只调用Bind****,这应该只能由你的服务器套接字调用(你也用来调用Listen).一旦您的客户(尽可能多的客户)连接5900,就无需在任何地方重新连接.您可以同时在5900上安装所有这些设备.如果您确实想重新连接,则必须设置其他服务器套接字在其他端口上进行侦听. (2认同)