Нужно ли закрывать NetworkStream и TcpClient или только TcpClient? - PullRequest
14 голосов
/ 01 октября 2011

Я читаю документацию по TcpClient.Close () и заметил это:

Вызов этого метода в конечном итоге приведет к закрытию соответствующего сокета, а также закроет связанный NetworkStream, который используется для отправки и получения данных, если они были созданы.

Итак, поправьте меня, если я ошибаюсь, но это говорит о том, что если кто-то позвонит Close() на TcpClient, то NetworkStream также будет закрыт.

Итак, почему в конце примера кода вызываются оба Close()?

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

Было бы так же хорошо, чтобы только позвонить tcpClient.Close();?

Ответы [ 4 ]

10 голосов
/ 02 октября 2011

Отвечая на этот вопрос, поскольку никто другой не сделал так, чтобы я мог принять ответ.

Согласно Гансу, вызывать NetworkStream.Close () не нужно, поскольку TcpClient.Close () закрывает базовый NetworkStream.

2 голосов
/ 02 октября 2011

NetworkStream и TcpClient реализуют IDisposable. Поэтому, на мой взгляд, лучшая практика - это упаковать его в блок использования, чтобы вам никогда не приходилось закрывать или утилизировать его вручную.

1 голос
/ 02 октября 2012

Закрытие клиента не закрывает поток, он находится в документе метода GetStream. Для справки просмотрите это обсуждение: Как правильно и полностью закрыть / сбросить соединение TcpClient?

0 голосов
/ 02 октября 2011

Вы должны просто сделать "TcpClient.Close ()"Или, если необходимо, введите оба

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...