Java UDP Socket получает периодически - PullRequest
0 голосов
/ 13 декабря 2011

1) У меня есть программа, которая отправляет данные через UDP с одного сервера на другой.

2) Другая программа получает их и просто пересылает их через UDP нескольким получателям через UDP.

3) Одним из направлений является localhost.

Данные принимаются в 2) и отправляются в 3) в постоянном потоке без перерыва. Тем не менее, приложение, получающее пакеты в 3) из 2), получает с перерывами. Он будет получать данные в течение 20 секунд, а затем не получать в течение нескольких минут и будет работать, по-видимому, случайным образом.

Этот ЖЕ код работает идеально при получении пакетов извне. Кроме того, если я запускаю tcpdump -i lo на порту, который прослушивает 3), на самом деле поток данных поступает в порт.

Я не могу понять, где может быть проблема?

-Стив

1 Ответ

0 голосов
/ 29 декабря 2011

Когда вы отправляете данные в TCP, вам не нужно беспокоиться об управлении потоком, потому что TCP делает это за вас - вы можете отправлять данные так быстро, как вам нравится, и метод записи будет блокироваться, если вы отправляете его слишком быстро.

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

Поэтому вам нужно иметь какую-то схему, которая ограничивает поток пакетов самостоятельно. Чтобы проверить, является ли это проблемой, просто вставьте сон между каждой отправкой. Если вы обнаружите, что отправляете 1 пакет в секунду или 10 в секунду, все они проходят, затем, когда вы удаляете режим сна, вы возвращаетесь к 20 секундам, и ничего, и вы ничего не знаете в течение нескольких минут, потому что ваш контроль потока недостаточен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...