Любой протокол приложений на основе UDP неизбежно будет подвержен потере пакетов, переупорядочению и (в некоторых случаях) дубликатам. «U» в UDP может означать «ненадежный», как в ненадежном протоколе дейтаграмм. (Хорошо, это действительно означает «Пользователь» ... но это, безусловно, хороший способ запомнить характеристики UDP.)
Потеря пакетов UDP обычно происходит из-за того, что ваш трафик превышает емкость буферизации одного или нескольких «скачков» между сервером и клиентом. Когда это происходит, пакеты отбрасываются ... и, поскольку вы используете UDP, уведомление на уровне транспортного протокола об этом не происходит.
Если вы используете UDP в приложении, приложение должно учитывать ненадежную природу UDP, реализуя свои собственные механизмы для работы с отброшенными и неупорядоченными пакетами и для управления собственным потоком. (Приложение, которое взрывает UDP-пакеты, не задумываясь о том, что это может иметь место в уже перегруженной сети, является плохим жителем сети .)
(В случае TCP пакеты, вероятно, также отбрасываются, но TCP обнаруживает и повторно отправляет отброшенные пакеты, и включается механизм управления потоком TCP, чтобы замедлить скорость передачи данных. Чистый результат " латентность».)
РЕДАКТИРОВАТЬ - исходя из комментария ОП, причиной его проблемы было то, что клиент не "прослушивал" в течение определенного периода, в результате чего пакеты (предположительно) были отброшены ОС клиента. Способ решения этой проблемы:
использует выделенный поток Java, который просто читает пакеты и ставит их в очередь для обработки, а
увеличить размер очереди пакетов ядра для сокета.
Но даже если вы примете эти меры, вы все равно сможете отбросить пакеты. Например, если машина перегружена, приложение может не получать временные срезы выполнения достаточно часто, чтобы прочитать и поставить в очередь все пакеты, прежде чем ядру придется их отбрасывать.
EDIT 2 - Есть некоторые споры о том, подвержена ли UDP дубликатам. Это, безусловно, правда, что UDP не имеет обнаружения или предотвращения врожденных дубликатов. Но также верно и то, что структура маршрутизации IP-пакетов, которая является Интернетом, вряд ли будет самопроизвольно дублировать пакеты. Таким образом, дубликаты, если они имеют место, могут возникать, потому что отправитель решил повторно отправить пакет UDP. Таким образом, на мой взгляд, хотя UDP подвержен проблемам с дубликатами, он не вызывает их per se ..., если только нет ошибки в стеке протоколов ОС или в структуре IP.