仅关闭Socket还是关闭流也足够了?

时间:2013-07-16 12:55:42

标签: c# sockets tcp

当我通过TCP Socket与我的服务器建立连接时,我使用以下代码进行通信:

Socket socket = ...

NetworkStream ns = new NetworkStream(socket);

StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWriter(ns);

现在......只做socket.Close();还是做得更好:

sw.Close();
sr.Close();
ns.Close();
socket.Close();

有谁知道清理/关闭/释放套接字最合适的方法是什么?

而且,我应该对上面定义的每个变量做一个Dispose()吗?

2 个答案:

答案 0 :(得分:2)

尝试过什么?

NetworkStream.Close() reference

  

关闭当前流并释放与当前流关联的所有资源(如套接字和文件句柄)。而不是调用此方法,确保正确处理流。

所以:

using (NetworkStream ns = new NetworkStream(socket))
{
     // Your code
} 

答案 1 :(得分:0)

您应该关闭输出流。这将刷新它,并关闭另一个流和套接字。不要自己关闭它们,或者如果必须,请在输出流之后关闭它们。否则你可能会丢失数据。