Если messageBytes.Length достаточно велик (скажем, около 30 000), то stream.Read читает меньше байтов, чем ожидалось.
Using stream As New Net.Sockets.NetworkStream(socket)
networkStream.Read(messageBytes, 0, messageBytes.Length)
End Using
Документация в MSDN заявляет об этом в разделе Примечания
Реализация может вернуть меньше байтов, чем запрошено, даже если конец потока не был достигнут.
Я смог прочитать его в цикле while, читая один байт, пока не будет достигнута желаемая позиция, например
Dim position = 0
While position < messageBytes.Length
stream.Read(messageBytes, position, 1)
position += 1
End While
Вопрос в том, может ли кто-нибудь сказать, почему реализация позволяет это? Я думал, что метод Stream.Read
блокирует, поэтому он должен подождать, пока все байты не станут доступными в потоке и не будут успешно прочитаны.