Если длина сообщенияBytes.Length достаточно велика (скажем, около 30 000), то stream.Read считывает меньшее количество байтов, чем ожидалось.NetworkStream считывает меньше байтов, чем ожидалось
Using stream As New Net.Sockets.NetworkStream(socket)
networkStream.Read(messageBytes, 0, messageBytes.Length)
End Using
documentation в MSDN заявляет это в его Замечания раздел
Реализация свободно возвращать меньше байт, чем запрошено даже если конец потока не было достигнуто.
я смог прочитать в цикле во время чтения одного байта, пока желаемое положение не будет достигнуто, как
Dim position = 0
While position < messageBytes.Length
stream.Read(messageBytes, position, 1)
position += 1
End While
Вопрос заключается в том кто может сказать, почему реализация позволяет это? Я думал, что метод Stream.Read
блокирует, поэтому он должен ждать, пока все байты будут доступны в потоке и будут считаны успешно.
Следует отметить, что вопрос находится в VB.NET, и что метод, который вы, может быть гораздо более чистой, позвольте мне изменить его. –
@cFrozenDeath Ничего себе, я полностью пропустил это: o Нужно еще немного кофе ... –
прочитал мое редактирование и выпил больше кофе :) –