Muliticast w praktyce

0

Przeglądam artykuły na temat multicastu i wszystko wygląda ok jak się to czyta, ale jak to realizuje się w praktyce? Tzn mam ambitny plan napisać program który pobiera obraz z kamerki i wysyła go do niektórych ale określonych komputerów w sieci. Z ładnych obrazków na wikipedi wynika że musiałbym skorzystać z muliticastu i grup multicastowych, ale jak dobrać taki adres, jak przypisać komputer do takiej grupy?

0

Rozumiem że oczekujesz genialnego, uniwersalnego sposobu dla każdego możliwego języka? o_O Zasadniczo sprowadza sie to do utworzenia socketa i wywołania funkcji typu join_group().
Zasadniczo z multicastami jest taki problem że nie wszędzie routing multicastowy jest uruchomiony.

0

Nie nie chodzi mi o taki sposób. Nie kumam tylko jak to zrobić żeby z pośród komputerów A, B, C i D strumień z kamerki mogły odbierać komputery A, C i D a B już np nie? Mam im przypisać jeden adres multicastowy czy jak?

1

To moze jednak doczytasz o tym jak działa taki routing? Zasadniczo wygląda to tak ze programowo dołączasz jaki komputer do grupy multicastowej a następnie w zależności od protokolu (PIM-DM lub PIM-SM) routery są o tym informowane. Następnie routery przekazują pakiety skierowane na taki grupowy adres (routery wiedzą kto zgłosił chęć przyjmowania tych pakietów).
Np. w Javie wygląda to tak:

MulticastSocket socket = new MulticastSocket(9999);
socket.joinGroup(InetAddress.getByName("234.234.234.234"));

i voila, mamy socket który będzie odbierał pakiety wysłane na taki adres multicastowy.
W C robimy to np. tak:

struct sockaddr_in addr;
struct ip_mreq mreq;
int sock = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(9999);
bind(sock, (struct sockaddr *) &addr, sizeof(addr));
mreq.imr_multiaddr.s_addr = inet_addr("234.234.234.234");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
0

Czyli ogólnie to kwestia odpowiedniego zaprogramowania tego a nie jakichś dodatkowych ustawień hostów. Trochę mi to rozjaśniło, dzięki.

0

Zasadniczo tak, o ile routery w sieci w której jesteś nie mają zablokowanego multicastu.

0

O, to ja jeszcze dopytam - czy znacie jakieś niskopoziomowe programy umożliwiające testowanie połączeń multicastowych?
A jeśli nie - programy, które korzystają z multicastów?
Chciałabym sobie na przykład uruchomić taki programik, a pod wiresharkiem pooglądać pakiety IGMP.

0

@aurel a nie możesz po prostu takiego napisać? Zasadniczo uruchomienie multicastu to jest tyle ile napisałem powyzej, raptem kilka linijek. Do tego dodajesz tylko wysyłanie wiadomości (kolejne kilka linijek) i już sobie możesz coś testować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1