Есть ли способ игнорировать широковещательные UDP-сообщения с DatagramSocket в Java на Windows? - PullRequest
3 голосов
/ 13 сентября 2011

Я ищу способ не получать широковещательные сообщения с помощью DatagramSocket .Реализация, кажется, скрывает адрес назначения, поэтому я не могу использовать его в качестве фильтра.Установка setBroadcast, кажется, ничего не делает.

У меня есть сокет, связанный с локальным IP-адресом, но он все еще получает все широковещательные сообщения из подсети.

InetAddress addr = InetAddress.getByName("1.2.3.4");
InetSocketAddress sockaddr = new InetSocketAddress(addr, 12345);
DatagramSocket socket = new DatagramSocket(sockaddr);

Что будет самым простым способомфильтровать широковещательные сообщения и получать только сообщения, отправленные непосредственно на мой ip?

РЕДАКТИРОВАТЬ: краткий ответ нет.Этот вопрос возник из-за архитектуры, в которой у нас была настраиваемая маршрутизация сообщений UDP, а некоторые узлы в подсети не обязательно вещали или интересовались вещаниями.Были и другие проблемы, и мы немного изменили архитектуру.

1 Ответ

0 голосов
/ 29 августа 2012

Вот простое Java-приложение , использующее пакеты UDP , которое показывает использование класса DatagramPacket для отправки и получения дейтаграмм UDP и запроса различных полей, таких как IP-адрес отправителя. Поэтому, если вы можете использовать IP-адрес отправителя в качестве указания на то, следует ли обрабатывать или игнорировать сообщение, это должно вам помочь.

Если вы используете класс DatagramSocket, полученная UDP-датаграмма содержит информацию заголовка, и вы можете проанализировать ее в соответствии с этой документацией DatagramSocket . В этой статье Википедии о протоколе пользовательских дейтаграмм обсуждаются формат и структура UDP-дейтаграмм.

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

Другим вариантом может быть предоставление какой-либо идентификационной информации или подписи в дейтаграмме, которая позволит вам идентифицировать разрешенные дейтаграммы в сравнении с теми, которые должны игнорироваться. Вы не упоминаете типы трансляций, но, возможно, вы можете игнорировать все, что меньше указанного количества байтов или что-то подобное. Или, возможно, вы можете игнорировать любые дейтаграммы из определенного диапазона портов или разрешать только дейтаграммы из определенного диапазона портов.

...