Преступник:
while (bytesRcvd > 0)
Пока любое сообщение получено, оно будет зацикливаться бесконечно (у вас нет условий, чтобы предотвратить это).
Возможно, этозаменяется простым if
, если только по какой-то причине (неочевидно в вашем коде) вам не нужно его зациклить:
if (bytesRcvd > 0)
При втором взгляде это выглядит так, будто вы пытаетесь проверить, что всебайты передаются с использованием этого кода:
while (bytesRcvd > 0)
{
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}
Третий параметр не является аргументом byref, поэтому он не будет обновляться с использованием фактически отправленного значения (если оно меньше значения, переданного в).Write
немного отличается от Read
тем, что он на самом деле выдает SocketException
, если не смог передать количество запрошенных байтов (в отличие от информирования вас о том, сколько было успешно).Я бы, вероятно, изменил бы его на:
if (bytesRcvd == 0)
throw new SocketException(String.Format("Unable to receive message");
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
Или, что еще лучше, реализовал бы фундаментальное кадрирование сообщений, чтобы ваше приложение могло знать, сколько байтов оно должно ожидать.