Re[2]: Проблемы при работе с сетью
От: XaSSeR  
Дата: 11.01.13 13:20
Оценка:
Здравствуйте, 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" }. Поэтому я не знаю что на входе когда работает не правильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.