Как «очистить» приемный буфер на Java DatagramSocket? - PullRequest
5 голосов
/ 09 декабря 2011

У меня есть программа на Java, которая постоянно отправляет данные UDP из внешней системы.

Периодически нам нужно прекратить получать данные (потому что другая машина обрабатывает их). В это время мой поток чтения сокетов переходит в спящий цикл. Когда пришло время начинать прием пакетов, я снова захожу в socket.receive(Packet) и у меня есть полный буфер пакетов, которые я должен не обрабатывать. (Данные поступили во время «остановки».)

Есть ли способ очистить буфер DatagramSocket?

Если нет, то какая лучшая альтернатива? Установите размер буфера в 0, когда я перехожу в состояние ожидания и возвращаю его, когда я снова начинаю обслуживать пакеты? Закрой розетку, когда я буду ждать, и открой новую, когда вернусь?

1 Ответ

4 голосов
/ 09 декабря 2011

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

Таким образом, сокет продолжает получать, как обычно, но если он находится в режиме простоя, он просто немедленно сбрасываетпакет.

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

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