Нужен ли PORT при присоединении к многоадресной группе или только по IP? - PullRequest
8 голосов
/ 24 февраля 2012

Я бы хотел узнать это раз и навсегда.Какова процедура для подключения многоадресного сокета?Я знаю, что вам нужно привязаться к локальному интерфейсу (вам нужен IP и порт для этого?), Тогда я знаю, что вам нужно присоединиться к группе (вам нужен IP: PORT для адреса, к которому вы хотите присоединиться, и снова для сетевого интерфейса!!! ??) и, наконец, вы можете покинуть группу.

Может ли кто-то с опытом прояснить, что в целом является целым рядом этих адресов?Я перечислю ниже:

  • BindAddress (IP: PORT)
  • NetworkAddress (IP: PORT)
  • MulticastAddress (IP: PORT)

Где и что здесь многоадресная группа ? 1015 *

Ответы [ 2 ]

6 голосов
/ 24 февраля 2012

Многоадресная группа - это специальный IP-адрес.Вы присоединяетесь к нему через setsockopt(), используя опцию сокета IP_ADDMEMBERSHIP, или, например, в Java через MulticastSocket.joinGroup().Здесь нет номера порта.Если вы хотите присоединиться через определенный локальный адрес, используйте перегрузку, которая указывает локальный адрес, или сначала вызовите setNetworkInterface().

Привязка к локальному адресу - это отдельная операция, которая в первую очередь определяет, какие локальные адресаСокет может отправлять и получать данные по одному или всем из них: либо по одному локальному адресу, который определяет, какую из доступных подсетей вы слушаете и можете отправлять через или через порт, или и то, и другое.Обычно лучше использовать INADDR_ANY в качестве адреса привязки, если ваше приложение магически не знает о топологии сети.

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

Вы отправляете в группу многоадресной рассылки, отправляя на адрес многоадресной рассылки.

1 голос
/ 24 февраля 2012

Да, вы должны определить и адрес, и порт для отправки / получения многоадресных сообщений. Это UDP-пакеты, поэтому им требуется адрес и порт для сетевого стека, чтобы он мог правильно доставлять сообщения участвующим процессам. Таким образом, чтобы прослушивать определенный набор многоадресных сообщений, ваше приложение должно привязываться к определенному IP-адресу многоадресной рассылки и комбинации портов (и, очевидно, для набора или всех интерфейсов на машине). Группа определяется комбинацией адрес / порт.

Хорошее быстрое объяснение

Некоторые примеры исходного кода на C и других языках

...