当我通过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()
吗?
答案 0 :(得分:2)
尝试过什么?
NetworkStream.Close()
reference:
关闭当前流并释放与当前流关联的所有资源(如套接字和文件句柄)。而不是调用此方法,确保正确处理流。
所以:
using (NetworkStream ns = new NetworkStream(socket))
{
// Your code
}
答案 1 :(得分:0)
您应该关闭输出流。这将刷新它,并关闭另一个流和套接字。不要自己关闭它们,或者如果必须,请在输出流之后关闭它们。否则你可能会丢失数据。