是否需要关闭NetworkStream和TcpClient,或只关闭TcpClient?

时间:2011-09-30 23:43:56

标签: c# dispose tcpclient networkstream

我正在阅读the documentation on TcpClient.Close()并注意到这一点:

  

调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的相关NetworkStream(如果已创建)。

所以,如果我错了,请纠正我,但是如果有人在Close()上调用TcpClientNetworkStream也会被关闭。

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

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

只能拨打tcpClient.Close();吗?

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

NetworkStream和TcpClient实现IDisposable。因此,我认为最好的做法是将其打包成一个使用区块,这样您就不需要手动关闭或处理它。

答案 2 :(得分:1)

关闭客户端不会关闭流,它位于GetStream方法的文档中。 有关参考,请参阅此讨论:How to properly and completely close/reset a TcpClient connection?

答案 3 :(得分:-6)

你应该做“TcpClient.Close()”
或者,如果必须,请键入两个