У меня открытое TCP-соединение и чтение с использованием NetworkStream.BeginRead(). После того, как соединение будет закрыто с обоих концов, вызывается обратный вызов и объект потока бесполезен, как говорит документация, EndRead() выдает исключение IOException или ObjectDisposedException, в зависимости от того, на каком конце он завершил соединение..NET NetworkStream закрыт, как убедиться, что все данные прочитаны?
Гарантировано, что нет никаких данных, которые мне не хватает в промежутке между последним успешным EndRead (и повторным запуском) и отключением, особенно если я это сделаю в конце? Если это не так, в случае, если я заканчиваю закрытие соединения, мне нужно вручную отключить NetworkStream.Read(), чтобы убедиться, что ничего не осталось непрочитанным?
Woo-hoo! Я знаю, что это правильно, но абсолютно никто не знает достаточно, чтобы подтвердить или отрицать! Подожди, почему я доволен этим? – Task
Я собираюсь воскресить это в надежде, что, возможно, на этот (очень родственный) вопрос будет дан ответ: как «EndRead» произведет 0 байтов, если единственный способ «EndRead» вызывается в обратном вызове «BeginRead», который требует передачи данных для выполнения? Должен ли я просто отправить нулевой байтовый ответ? – Brandon
Ну, теперь вы говорите о * записи * в поток, а не о чтении. Это совсем другое. У вас есть открытый вопрос для ссылки? По сути, вам не нужно специально писать нулевые байты, вам просто нужно завершить свой ответ. – Task