Если вы знаете, что сообщение не будет превышать 4096 байт, вы можете написать что-то вроде этого:
int totalBytesRead = 0;
int bytesRead;
while ((bytesRead = clientStream.Read(message, totalBytesRead, message.Length - totalBytesRead)) !=0)
{
totalBytesRead += bytesRead;
}
totalBytesRead
используется для указания clientStream.Read
, куда поместить копируемые данные.
clientStream.Read
возвращает 0, если нет доступных данных.
Обратите внимание, что при такой настройке вы не можете прочитать более message.Length
байтов. Если ваши пакеты могут быть больше, то я предлагаю увеличить ваш буфер. Я не рекомендовал бы постоянно изменять размер массива, потому что это приведет к фрагментации кучи большого объекта (если сообщения станут больше 80 КБ), и в какой-то момент вам придется установить максимальный размер сообщения, даже если вы обрабатываете "произвольно большие" сообщения.