Kezdőlap › Fórumok › Programozás › multicast – többes küldés
- This topic has 2 hozzászólás, 2 résztvevő, and was last updated 18 years, 11 months telt el by
tovis.
-
SzerzőBejegyzés
-
2006-08-02-12:20 #20673022006-11-08-21:39 #2067303
Több éves(!) kinlódás után az „udpghost” levelezési listájában kaptam meg a választ.
Szóval a multicast csoport csomag vétel így máködik:
– létrehozzuk az UDP socket -et
– bindelünk a „0.0.0.0:xxxxx” -as vagy a „*” címre
– kitöltjók az mreq struktúrát (interfész cím – mondjuk 192.168.1.xxx és a kívánt csoport
cím – mondjuk 224.0.0.xxx)
– setsockopt – ADD_MEMBERSHIP
és voila veszi a csomagokat. Ha megunjuk csak egy DROP_MEMBERSHIP kell. Ha kell egy másik csoport is (!) akkor arra is elvégezzükaz ADD_MEMBERSHIP műveletet.
A win32 API -hoz képest annyi a különbség, hogy így tünik az interfész címre nem tudunk már bindelni – azaz a 192.168.1.xxx:xxxxx címre nem szabad/lehet bindelni! Vagyis ha egyszer egy socketre azt mondtuk hogy multicast csatornában megy akkor csak olyat tud!?
Ha valaki tud valamit hozzá tenni szívesen hallanám.
UI: két csoportra kipróbáltam – 224.0.0.10 és 224.0.0.202009-12-04-19:58 #1883881Adva van egy lokális hálózat, mondjuk a 192.168.1.xxx cím kiosztással.
Van egy szépenb mûködõ UDP socket modul, amely mondjuk azz adott gép (192.168.1.72) cím 8000 -es portjára van „bind” -elve. select() függvénnyel szépen ad/vesz. Be kellene iktatni, mondjuk a 224.0.0.10 -es multicast címrõl érkezõ csomagokat, amit az általam talált doksik szerint a setsockopt és ip_mreq struktúra segítségével a következõ képpen valósíthatunk meg:int so;
struct ip_mreq ma;
inet_aton(„224.0.0.1”,&ma.imr_multiaddr);
inet_aton(„192.168.1.72”,&ma.imr_interface);
setsockopt(so,IPPROTO_IP,IP_ADD_MEMBERSHIP,&ma,sizeof(ma));Ennyi, így megadtuk a multicast -hoz használt interfészt és a kiválasztott multicast címet.
Ha ez a kódrész lefut, a $netstat (most nem emlékszem pontosan milyen opcióval) az interfész mellé – mondjuk eth0 – kiteszi a „224.0.0.10” címet (elõtte csak a az eth0 224.0.0.1 volt).
Mindezek ellenére nem veszi le a multicasst csatornában érkezõ csomagokat – tuti hogy jönnek!
Eddig ezt a problémát úgy kerültem el, hogy eleve a multicast címre „bind” -eltem (úgy hogy a biztonság kedvéért megadtam melyik interfészre várom a multicast csomagokat a setsockopt IP_MULTICAST_IP opciójával).
A dolog lényege az, hogy szeretném ki-be kapcsolni a multicast fogadást, anélkül, hogy a socketet bezárnám, így az adott 192.168.1.72 8000 porton a socketél csak hol leveszi a multicast csomagokat hol meg nem (IP_DROP_MEMBERSHIP opció).
Mi kellhet még, semmilyen hibát nem ad vissza a program, a netstat azt mondja, hogy a multicast csatolás él, és még sem veszi a csomagokat, ami egy másik gépbõl folyamatosan dõlnek? -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.

legutóbbi hsz