我具有被連接到一些網絡服務器(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()方法。我應該爲所有人打電話嗎?或者只有1個?有沒有必要釋放一些資源?
這會結束這段代碼之後的連接,還是隻會釋放讀者? – Petr 2013-05-14 08:37:29
@Petr - 您可以將它們嵌套在一起,連接將僅在讀取器和寫入器處理完畢且網絡流沒有要讀取的數據後纔會關閉。 – 2013-05-14 08:39:22
你說「只有當網絡流沒有要讀取的數據時」,但如果服務器正在向網絡流發送一些數據(它有數據要讀取),但我想強制關閉連接呢? – Petr 2013-05-14 08:40:41