@EnderBro3D

Неправильно приходят байты?

Делаю кор на Minecraft сервер. Суть проста: передача данных пользователя, групп и т.д.
При передачи групп вылезла ошибка. IndexOutOfBoundsException.
Потом приходит отрывок данных. Кто-то сказал, если пакет слишком большой, его разбрасывает на чанки и отправляет, а когда приходит, то чанки заного "склеиваются". Но почему-то у меня ничего не склеивается.

Вот сама ошибка:
5b2128bf59399738404180.png
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
Vamp
@Vamp
Раз не склеивается само, значит нужно склеивать самому. Алгоритм довольно прост - читаем из буфера не более readableBytes() байт. Если не хватило данных до полного пакета, то сохраняем прочитанное и ждём следующего пакета, откуда дочитываем недостающее.

Обычно в сетевых протоколах предусматривают заголовок с общей длиной пакета или маркеры конца, чтобы можно было понять сколько нужно вычитывать данных из сети.

Вот эти квадратики в логе почти наверняка и есть маркер окончания пакета или заголовок следующего:
5b220c3b09f5b774481408.png

Но я думаю, что движок предоставляет абстракции более высокого уровня, которые сами собирают сырые пакеты в какой-нибудь Packet250CustomPayload, а вам останется только обработать их.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы