我具有被连接到一些网络服务器(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