关闭和清理Socket连接的正确方法是什么?

我对Socket对象上的相关方法的聚宝盆感到有点困惑,该对象应该关闭并清理套接字连接。 考虑以下:

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect("192.168.1.22", 8333); socket.Send(Encoding.UTF8.GetBytes("hello")); // now for the closing fun socket.Shutdown(SocketShutdown.Both); socket.Disconnect(false); socket.Close(); socket.Dispose(); 

另外, 这个人说要真正干净地关闭连接,必须执行socket.Shutdown(SocketShudown.Send) ,然后等待对方响应。

什么是关闭,然后清理套接字连接的正确方法?

关闭套接字会关闭连接,而Close是一个围绕Dispose的包装器方法,所以一般来说

 socket.Shutdown(SocketShutdown.Both); socket.Close(); 

应该够了。 有些人可能会说,Close实现可能会改变一天(所以它不再调用Dispose),你应该在调用Close之后手动调用Dispose,但我怀疑那会发生,亲自:)

或者,考虑使用(yeh):

 using (var socket = new Socket(...)) { .... socket.Shutdown(SocketShutdown.Both); }