unbind socket连接C#/ python

时间:2011-07-01 03:15:45

标签: c# python sockets

我有什么:

  • 我有两个用C#编写的套接字客户端程序。
  • 我有一个套接字服务器程序(不是由我编写,但它有效)在Python中。

问题:

我写的第一个c#套接字客户端工作正常,可以与python服务器客户端通信。我可以毫无问题地发送数据。但是我想重写代码以使其更加面向对象,所以我创建了第二个程序,它与第一个程序相同。

问题是第二个不会连接,说这个:

  

System.Net.Sockets.SocketException:尝试通过其访问权限以禁止方式访问套接字。

我用谷歌搜索了这个,我已经意识到第一个连接的连接还没有完全解除绑定。

当我做netstat -a时,我实际上看到了连接,最后说了TIME_WAIT。

问题是,我该如何解开它?它是在C#/客户端吗?

仅供参考我已经尝试关闭/断开/关闭套接字,但没有一个工作。我也输入了这个命令

connection.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

在实例化套接字连接但是也不起作用。

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

1 个答案:

答案 0 :(得分:0)

我知道你说过你已经关闭或断开连接。

但是你是否正在重新初始化套接字变量。

例如:connection = new System.Net.Sockets.Socket(...

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

例如:

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

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