Вы создаете цикл для чтения.
Stream.Read возвращает int для байтов, которые он прочитал, или 0, если достигнут конец потока.
Итак, это как:
int bytes_read = 0;
while (bytes_read < buffer.Length)
bytes_read += stream.Read(buffer, bytes_read, buffer.length - bytes_read);
РЕДАКТИРОВАТЬ: теперь вопрос в том, как вы определяете размер буфера. Если ваш сервер сначала отправляет размер, это нормально, вы можете использовать приведенный выше фрагмент. Но если вам нужно читать до тех пор, пока сервер не закроет соединение, вам придется использовать try / catch (что хорошо, даже если вы знаете размер) и использовать bytes_read, чтобы определить, что вы получили.
int bytes_read = 0;
try
{
int i = 0;
while ( 0 < (i = stream.Read(buffer, bytes_read, buffer.Length - bytes_read) )
bytes_read += i;
}
catch (Exception e)
{
//recover
}
finally
{
if (stream != null)
stream.Close();
}