2009-07-24 4 views
1

Ich habe eine Frage zu Qt & Netzwerk-Sockets. Wenn ich einen Computer mit mehreren IP-Adressen in verschiedenen Netzwerken habe, wie öffne ich einen Udp-Socket für eine Multicast-Gruppe auf einer bestimmten Netzwerk-Adapter/IP-Adresse.Wie öffne ich einen Udp-Socket für eine Multicast-Gruppe mit Qt?

zB: ip 192.168.2.1 und 172.20.0.1 und ich möchte einen Socket erstellen, die Pakete, die von der Multicast-Gruppe 228.5.6.7 auf dem 172.20.0.1 Netzwerkadapter empfängt.

+1

FWIW, ich habe einen Fehler auf qt hier geöffnet: http://bugreports.qt.nokia.com/browse/QTBUG-8652 – Macke

Antwort

3

Sie sollten, dass in imr_interface wie unten gezeigt: (wahrscheinlich INADDR_ANY jetzt wird es eingestellt)

struct ip_mreq mreq; 
mreq.imr_multiaddr.s_addr = inet_addr("228.5.6.7"); 
mreq.imr_interface.s_addr = inet_addr("172.20.0.1");// <---- right here 
... 
QSocketDevice* sdev = new QSocketDevice(QSocketDevice::Datagram); 
... 
setsockopt(sdev->socket(), IPPROTO_IP, IP_ADD_MEMBERSHIP,(const char *)&mreq, sizeof(struct ip_mreq)); 
... 
+0

Ich denke, er verwendet das QT-Netzwerkmodul und nicht rohe Betriebssystem bereitgestellten Sockets (speichert die kleinen Unterschiede in Winsock, wenn Sie eine plattformübergreifende App erstellen). – ewanm89

+2

ewanm89: So verwenden Sie Qt-Sockets. sdev ist ein QSocket-Gerät. QSocketDevice * sdev = neues QSocketDevice (QSocketDevice :: Datagram); – Indy9000

0

Wenn es ein Abhörsocket ist, Sie binden an die IP-Adresse verwenden, kann es zu einer bestimmten IP-Adresse zu binden zuhören. Wenn es sich um einen Client-Socket handelt, verwaltet das Betriebssystem die richtige Schnittstelle, um es zu erstellen, um diese IP-Adresse gemäß Routing-Tabellenregeln zu erreichen.

+0

wird jedoch nicht auf Multicast-Adressen funktionieren - das ist mein Problem. –

+0

Siehe yuriy's Beitrag http://www.qtcentre.org/forum/archive/index.php/t-3347.html Ja, kann die Multicast-Option in der QT-API noch nicht direkt einstellen. – ewanm89

Verwandte Themen