Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否需要同时关闭NetworkStream和TcpClient,还是只关闭TcpClient?_C#_Dispose_Tcpclient_Networkstream - Fatal编程技术网

C# 是否需要同时关闭NetworkStream和TcpClient,还是只关闭TcpClient?

C# 是否需要同时关闭NetworkStream和TcpClient,还是只关闭TcpClient?,c#,dispose,tcpclient,networkstream,C#,Dispose,Tcpclient,Networkstream,我正在阅读并注意到: 调用此方法最终将关闭关联的套接字,如果创建了关联的网络流,还将关闭用于发送和接收数据的关联网络流 因此,如果我错了,请纠正我,但这表示如果在TcpClient上调用Close(),则NetworkStream也将关闭 那么,为什么在代码示例的末尾都调用了Close() networkStream.Close(); tcpClient.Close(); 只调用tcpClient.Close()是否也一样好?回答这个问题,因为没有其他人这样做,所以我可以接受答案 根据Hans

我正在阅读并注意到:

调用此方法最终将关闭关联的套接字,如果创建了关联的网络流,还将关闭用于发送和接收数据的关联网络流

因此,如果我错了,请纠正我,但这表示如果在
TcpClient
上调用
Close()
,则
NetworkStream
也将关闭

那么,为什么在代码示例的末尾都调用了
Close()

networkStream.Close();
tcpClient.Close();

只调用
tcpClient.Close()是否也一样好

回答这个问题,因为没有其他人这样做,所以我可以接受答案

根据Hans的说法,调用NetworkStream.Close()是不必要的,因为TcpClient.Close()关闭其底层的NetworkStream。

您只需执行“TcpClient.Close()”

或者,如果必须,请同时键入NetworkStream和TcpClient implement IDisposable。因此,在我看来,最好的做法是将其打包到一个using块中,这样您就不需要手动关闭或处理它。

关闭客户端并不关闭流,它在GetStream方法的文档中。
作为参考,请查看此讨论:

是的,没有必要。在该示例中使用tcpClient.Close()也不是必需的,程序在该示例之后立即终止:)在.NET 3.0之前,必须显式关闭tcpClient和底层NetworkStream。从.NET 3.0开始,在关闭TcpClient时,基础NetworkStream将关闭。TcpClient上的Close()和Dispose()是等效的,Close()添加了一些内部日志记录。这个答案不正确。见薇薇安的答案。如上所述,状态
在发送和接收数据时必须关闭网络流。关闭TcpClient不会释放NetworkStream。
但是,调用此方法的状态
最终将导致关闭关联的套接字,并且如果创建了用于发送和接收数据的关联NetworkStream,也将关闭该关联的NetworkStream。
我怀疑GetStream文档已过期-该注释自.NET 2.0(当时仍然是一个问题)以来就一直存在.我也有同样的问题,找到了这篇文章,参考源代码证实了TcpClient.Close也调用了NetworkStream的Close,所以这个答案是正确的,那张钞票过期了。它曾经是必要的,但自从.NET3.0以后就不再是了。