2013-07-16 155 views
2

当我建立我的服务器通过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

试过了什么?

NetworkStream.Close() reference

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

所以:

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

从来没有想到这一点。谢谢CodeCaster, – Eric

0

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