我有什么:
问题:
我写的第一个c#套接字客户端工作正常,可以与python服务器客户端通信。我可以毫无问题地发送数据。但是我想重写代码以使其更加面向对象,所以我创建了第二个程序,它与第一个程序相同。
问题是第二个不会连接,说这个:
System.Net.Sockets.SocketException:尝试通过其访问权限以禁止方式访问套接字。
我用谷歌搜索了这个,我已经意识到第一个连接的连接还没有完全解除绑定。
当我做netstat -a
时,我实际上看到了连接,最后说了TIME_WAIT。
问题是,我该如何解开它?它是在C#/客户端吗?
仅供参考我已经尝试关闭/断开/关闭套接字,但没有一个工作。我也输入了这个命令
connection.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
在实例化套接字连接但是也不起作用。
我是否必须在服务器端执行某些操作才能取消绑定连接?
答案 0 :(得分:0)
我知道你说过你已经关闭或断开连接。
但是你是否正在重新初始化套接字变量。
例如:connection = new System.Net.Sockets.Socket(...
如果您使用的是旧版本的.Net,您可能还必须在调用Close()后调用Dispose()。
例如:
connection.Close();
connection.Dispose();
connection = new System.Net.Sockets.Socket(...
确保始终使用try语句中的套接字,因为任何调用发送和接收数据或关闭套接字都可能导致错误,在哪个阶段,您应该记录错误并调用Close()然后如果适用则Dispose( )在套接字实例上清除资源。完成此操作后,您可以重新初始化套接字的新实例以尝试与服务器的新连接。