2012-02-24 12 views
7

Chciałbym się tego nauczyć raz na zawsze. Jaka jest procedura łączenia gniazda multiemisji? Wiem, że musisz połączyć się z lokalnym interfejsem (czy potrzebujesz adresu IP i portu?), Wtedy wiem, że musisz dołączyć do grupy (potrzebujesz adresu IP: PORT dla adresu, do którego chcesz dołączyć, i interfejsu sieciowego ponownie! !! ??), a następnie w końcu możesz opuścić grupę.Czy potrzebny jest port PORT podczas dołączania do grupy multiemisji lub po prostu IP?

Czy ktoś z doświadczeniem może wyjaśnić, co jest całością z tych wielu adresów? Ja lista poniżej:

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

Gdzie i jaka jest multicast grupa tutaj?

Odpowiedz

5

grupy multiemisji jest specjalny adres IP. Dołączasz do niego poprzez setsockopt() używając opcji gniazda IP_ADDMEMBERSHIP lub np. w języku Java przez MulticastSocket.joinGroup(). Brak numeru portu tutaj. Jeśli chcesz dołączyć przez określony lokalny adres, użyj przeciążenia, które określa lokalny adres, lub zadzwoń pod numer setNetworkInterface().

Powiązanie z lokalnym adresem jest oddzielną operacją, która przede wszystkim określa, które adresy lokalne gniazdo może wysyłać i odbierać dane: jeden lub wszystkie z nich: jeden adres lokalny, który określa, które z dostępnych podsieci są słuchać i wysyłać za pośrednictwem portu lub portu albo obu. Zwykle najlepiej jest używać INADDR_ANY jako adresu powiązania, chyba że aplikacja magicznie wie o topologii sieci.

Jest to mylące ze względu na fakt, że można połączyć się z adresem multiemisji w systemie Linux, ale wydaje się to być nieporozumieniem, które zawsze będzie z nami.

Wysyłam do grupy multiemisji, wysyłając na adres multiemisji.

+0

Dzięki EJP, ale nadal nie rozumiem. Java DatagramChannelImpl.joinGroup pobiera SocketAddress (z portem). Tak myślę, że mówisz, że adres multicast (IP) jest również znany jako grupa multicast, prawda? Chciałbym zrozumieć różnice i cele tych trzech adresów: MulticastAddress, NetworkAddress i BindAddress. – chrisapotek

+0

@chrisapotek patrz edit: czy to sprawia, że ​​jest jaśniejszy? – EJP

+0

@EJB Otworzyłem dwa dodatkowe pytania w celu uzupełnienia tego. Naprawdę chciałbym to zrozumieć: Oto one: http://stackoverflow.com/questions/9468991/why-datagramsocketimpl-joingroup-method-takes-a-inetsocketaddress-if-the-port-do i http: // przepełnienie stosu.com/questions/9469036/why-datagramsocketimpl-joingroup-method-takes-a-network-interface-if-the-socket-m – chrisapotek

0

Tak, należy zdefiniować zarówno adres, jak i port do wysyłania/odbierania wiadomości multiemisji. Są to pakiety UDP, więc wymagają zarówno adresu, jak i portu, aby stos sieci mógł prawidłowo dostarczać komunikaty do uczestniczących procesów. Aby odsłuchać konkretny zestaw komunikatów multiemisji, aplikacja musi połączyć się z konkretną kombinacją adresu IP i portu multiemisji (i oczywiście dla zestawu lub wszystkich interfejsów na komputerze). Grupa jest zdefiniowana przez kombinację adres/port.

Good quick explanation

Some sample source code in C and other languages

+0

To nie moja sprawa, ale nie odpowiedziałeś na pytanie. Nie pytał o wysyłanie i odbieranie, pytał o dołączenie. – EJP

+0

Szukałem więcej, aby zrozumieć, jaka rola (w jakim celu) każdy z tych trzech adresów gra w tej historii. – chrisapotek

Powiązane problemy