如何正确关闭网络流连接?

时间:2013-05-14 08:34:33

标签: c# networking

我有一个连接到某个网络服务器(tcp)并使用网络流连接的应用程序:

if (!SSL)
{
     _networkStream = new System.Net.Sockets.TcpClient(Server, Port).GetStream();
     _StreamWriter = new System.IO.StreamWriter(_networkStream);
     _StreamReader = new System.IO.StreamReader(_networkStream, Encoding.UTF8);
}

if (SSL)
{
     System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(Server, Port);
     _networkSsl = new System.Net.Security.SslStream(client.GetStream(), false,
                    new System.Net.Security.RemoteCertificateValidationCallback(Protocol.ValidateServerCertificate), null);
     _networkSsl.AuthenticateAsClient(Server);
     _StreamWriter = new System.IO.StreamWriter(_networkSsl);
     _StreamReader = new System.IO.StreamReader(_networkSsl, Encoding.UTF8);
}

///// since now I working with both reader and writer globally in multiple threads

我正在异步使用读写器(在2个线程中),我需要让这两个流全局可用(它们在类级别定义为公共引用),所以我不知道是否using声明可以在这里使用。

我应该如何正确关闭此连接?所有对象(NetworkStream,流编写器和阅读器)都具有Close()方法。我应该为所有人打电话吗?或者只有其中一个?是否需要发布一些资源?

2 个答案:

答案 0 :(得分:2)

将它们放在using块中。在操作完成后,它将适当地关闭和处理每个流。

using (StreamReader reader = new StreamReader(_networkStream, Encoding.UTF8)) 
{

}

答案 1 :(得分:0)

使用using(){}块。这样,所有连接/流在使用后都会正确关闭。

using(_networkStream = new System.Net.Sockets.TcpClient(Server, Port).GetStream())
{
    using(_StreamWriter = new System.IO.StreamWriter(_networkStream))
    {
      //do stuff
    }
    using(_StreamReader = new System.IO.StreamReader(_networkStream, Encoding.UTF8))
    {
       //do stuff
    } 
 }