Я изучаю и пытаюсь понять, как многоадресная рассылка реализована в Java. Я разработал небольшую программу, следуя примеру, приведенному на http://www.nmsl.cs.ucsb.edu/MulticastSocketsBook/#javaexamples и выполняла многоадресную рассылку пакетов дейтаграмм (UDP) нескольким клиентам на одном хосте.
Однако, когда я пытался запускать клиентов на разных машинах (в одной локальной сети (например, в моем домашнем WiFi), на стороне клиента не было получено никаких пакетов. Я убедился, что брандмауэр моего маршрутизатора отключен, а на всех других машинах был открыт порт.
Думая, что в моей программе может быть какая-то ошибка, я взял примеры, скомпилировал их и запустил сервер и клиент на разных машинах, но результат тот же (нет доставки пакетов на разные машины). Я даже пытался запустить клиент на Ubuntu (в VirtualBox с адаптером Bridge), но безуспешно.
Пройдя SO, я наткнулся на Java Multicast Time To Live всегда равен 0 объяснение проблемы с заголовком TTL в многоадресной рассылке Java. Поэтому я применил предложение, представленное в ответе на этот вопрос, но все еще та же проблема. Я отследил пакеты с помощью WireShark и убедился, что значение TTL действительно равно 5 (я установил его равным 5, чтобы увеличить вероятность!)
Я не уверен, где я делаю неправильно. Я был бы очень признателен, если бы вы могли указать мне правильное направление.
P.S. : я использовал многоадресные адреса, такие как 235.1.1.1 / 239.255.211.111 и порт 4466 (этот порт я держал открытым в брандмауэре всех машин для входящего + исходящего n/w)
multi-homed
или нет; то есть наличие более одного сетевого интерфейса. Если вы это сделаете, вам нужно использовать третий конструктор классаDatagramSocket
, где вам нужно указать локальный порт и локальный IP-адрес привязки вашего предпочтительного сетевого интерфейса. - person ecle   schedule 12.12.2011multi-homed
и используете классMulticastSocket
, используйтеsetInterface(inetAddress)
для установки IP-адреса привязки вашего предпочтительного сетевого интерфейса. - person ecle   schedule 12.12.2011