Как работает чтение (буфер, смещение, длина), если я передаю длину для чтения как 32, означает ли это, что он будет блокировать до получения 32 байтов?C# Networkstream.read()
Я понимаю, что он вернет и исключение или 0 в случае исключения сокета или если соединение будет закрыто, соответственно.
Что делать, если отправитель отправляет только 31 байт, будет ли чтение продолжать блокироваться? Если это правда, означает ли это, что read всегда будет возвращать целое число, равное длине, переданной ему? а также то, как я могу контролировать таймаут, если оставшийся 1 байт не приходит через определенное время.
Важны и то еще не ответил
В отличии от этого, что, если отправитель посылает 32 байт, значит ли это гарантировать, что чтение будет блокироваться, пока все 32 не будут получены или может он выйти не читая все 32 байта ,
Я добавил пример кода, демонстрирующий, что Read не будет блокировать ожидания для заполнения всего буфера. Если вы ничего не отправляете, да, это будет заблокировано, но если вы отправите хотя бы один байт, он будет читать и возвращаться. –
Как отвечать на вторую часть вопроса, если я отправляю 32 байта, и я определяю длину 32 байта в методе чтения, гарантирует ли это, что он обязательно прочитает 32 байта? я имею в виду, что он будет заблокирован, пока не будет получено 32 байта. – Kazoom
@Kazoom, по-моему, на этот вопрос уже были заданы два разных поста и ссылки на них. Он будет блокироваться, пока не будет получен хотя бы один байт. – scottm