取消绑定套接字连接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);

在实例化套接字连接时,但这也不起作用。

我是否必须在服务器端执行某些操作才能解除连接绑定?

取消绑定套接字连接C#/python

我知道你说过你已经调用了close或disconnect。

但是您正在重新初始化套接字变量吗。

例如:connection=新的System.Net.Socket.Socket(…

如果您使用的是旧版本的.Net,您可能还必须在调用Close((之后调用Dispose((。

例如:

connection.Close();
connection.Dispose();
connection = new System.Net.Sockets.Socket(...

请确保始终使用try语句中的套接字,因为任何发送和接收数据或关闭套接字的调用都可能导致错误。在哪个阶段,您应该记录错误并调用close((,然后在套接字实例上调用Dispose((以清除资源。完成此操作后,可以重新初始化套接字的新实例,以尝试与服务器建立新连接。