Здравствуйте, andrey82, Вы писали:
A>1) NetworkStream.Read заполнит буфер не полностью, а только на реально прочитанные count байт. Это надо учитывать при обработке массива. Т.е. за 1 чтение данные из сети могут быть получены в общем случае не все.
Я в курсе. Но count мне не важно. Внутри буфера уже есть вся необходимая информация о длинне сообщения.
A>2) Зачем тут catch? Если только длина массива меньше 4 байт, но опять возвращаемся к п.1.
Остался с тех времен, когда я искал ошибку, и долго не мог найти.
A>Аналогично с Recive() — строить тут логику управления на исключениях настоятельно не рекомендуется.
А от этого может быть то, что у меня получается?
A>А что при этом на входе у Recive() ?
В представленном выше коде есть такая строка
_log.WriteLog("От клиента " + _remotehost.Address.ToString() + " получены данные " + String.Join("; ", NetMessage.Recive(buffer)));//+". Число считанных байт - "+count.ToString()+". Данные - "+GetStringFromArrayBytes(buffer));
Так вот, когда я раскоменчиваю строку, чтобы посмотреть что на выходе у Recive() (то есть что лежит в buffer) все начинает отлично работать и выводит что считано 4096 байт данных и все байты через |. А когда убираю данную строку, получаю иногда NetMessage.Recive(buffer) возвращает такое — new string[] { "" }, хотя должно быть new string[] { "Helo", "World" }. Поэтому я не знаю что на входе когда работает не правильно.