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

标签 c# sockets networking

我对 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();

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

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

最佳答案

关闭套接字会关闭连接,而 Close 是对 Dispose 的包装方法,因此通常

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

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

或者,考虑使用 using (yeh):

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

关于c# - 关闭和清理 Socket 连接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354946/

相关文章:

c# - TCP 发送简单的洪水控制和同步 - P2P 网络摄像头

ios - 为什么在真实iOS设备上调试不发送网络数据包

c# - 如何强制二进制应用程序使用 C# 工具中的 SOCKS 代理?

delphi - 在delphi中建立tcp ip连接时无法读取消息

java - 为什么服务器不写给客户端?

python - 使用 select 处理多个请求

C#从excel文件中读取数据结果###

c# - 是否可以将 Json.Net 设置为忽略 $type?

c# - 在 WinForms 中托管 IE 8 并打开 PDF

c# - 从 C# 自动打开 SSMS