.NET закрытый NetworkStream, как быть уверенной все данные, читается?

У меня есть открытое соединение TCP, и читающий использование NetworkStream. BeginRead (). После того как соединение закрывается с обоих концов, обратный вызов называют, и потоковый объект бесполезен - как документация, говорит, EndRead () бросает IOException или ObjectDisposedException, зависящий в этом случае, на котором конец завершил соединение.

Гарантируется, что нет никаких данных, которые я пропускаю просто промежуточный последний успешный EndRead (и re-BegingRead) и разъединение, особенно если я делаю это в своем конце? Если это не, в случае, если я - конец, закрывающий соединение, сделайте я имею к вручную NetworkStream. Читайте () при разъединении, чтобы удостовериться, что ничто не оставляют непрочитанным?

1
задан Stockhausen 18 June 2010 в 07:55
поделиться

1 ответ

В этом случае следует использовать BeginRead для чтения потока (точно так же, как вы это делаете) и для обработки случая «больше данных в потоке» в методе обратного вызова.
Метод обратного вызова вызывает EndRead и собирает данные, считанные из потока (обычно путем добавления их к экземпляру StringBuilder) , а затем снова вызывает BeginRead . Как только EndRead вернет 0 байтов, это ваша гарантия, что из потока больше не будет считываться данных.

Вот документация, которая может вам пригодиться: Использование сокетов async-клиента

Я заметил, что нигде не было специально указано, что возврат 0 байтов был гарантией, поэтому я понимаю вашу путаницу здесь, но пример Совершенно ясно, что это ваш сигнал бросить чтение.

2
ответ дан 2 September 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: