![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Felixx |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Подскажите пожалуйста, из-за чего может быть следующая ситуация?
В основном один из TCP пакетов приходит сразу и полностью, в его Data к примеру 90 байт. Но бывают моменты, совершенно не понятно почему и без всякой видимой логики: Приходит этот же пакет, но не 90 а например 70 байт, так как описание пакета уже расчитана на прием 90 байт возникают исключения что нехватает байтов. Если сделать break записать что есть в Temp буффер, поймать следующий пакет, то придет оставшийся "Хвост" в 20 байт... добавим его в Temp и все как бы хорошо и отлично. Но иногда "хвост" может отрезаться не в 20 а в 30 байт, тоесть совсем беспорядочно. Дело не в клиенте, так как проверялось на C#, и на другом Java движке.... там "Хвосты не отрубались" и разу. Мне подсказали что надо поставить флаг TCP_NODELAY ... поставил и не помогло. Привожу код... Сам старт сервера. Инициализатор канала.
Обработка принятого пакета из класса ClientConnection -> extends Connection -> extends ChannelInboundHandlerAdapter
Результаты работы...
Прошу помощи или советов у знатаков netty... Заранее огромное спасибо! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Felixx |
|
||||||||||||||||||||||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Кому интересно, все дело в том что метод readChannel не обеспечивает того, что пакет получен полностью.
у меня этот метод выглядит так:
По этому нужно либо в ручную записывать байты по порядку в список и вытаскивать оттуда свой нужный пакет. Либо заюзать уже готовые решения от io.netty.. Например унаследовать свой класс Connection от ByteToMessageDecoder или LengthFieldBasedFrameDecoder.... Если у кого то есть примерчик использования этих декодеров, я был бы очень признателен, если сможете поделиться реализацией. З.Ы Огромное спасибо за наводку alexandy. Это сообщение отредактировал(а) Felixx - 17.12.2013, 10:29 |
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |