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