Bonjour à tous,
Je me tourne vers vous pour essayer de trouver des développeurs qui auraient eu (et résolu ?) le problème qui se pose à moi.
Je dois écrire un bout de code capable de recevoir des trames UDP en multicast. Pour info (je ne le savais pas ce matin), le multicast est entre l'unicast et le broadcast : une trame est envoyée à une adresse ip unique de classe D (224.0.0.0 à 239.255.255.255), et plusieurs clients abonnés à ce groupe reçoivent cette trame.
En C++ avec Qt, pour envoyer la trame, un petit coup de QUdpSocket avec une écriture sur l'adresse et le port, et le tour est joué...
Pour ceux qui auraient reconnu, c'est un message SSDP, utilisé dans la phase 1 (découverte) du protocole UPNP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 QUdpSocket * udp; QHostAddress adr; adr = "239.255.255.250"; qint16 port = 1900; QByteArray datagram = "NOTIFY * HTTP/1.1\r\n[...]"; udp->writeDatagram(datagram.data(), adr, port);
Maintenant il faut que je code l'autre coté, la réception du message, et c'est là que ça se complique. La logique simple aurait voulu qu'un code dans ce style fonctionne :
Mais si c'était le cas je ne serais pas ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 udpSocket = new QUdpSocket(this); QHostAddress multicastAddr("239.255.255.250"); udpSocket->bind(multicastAddr, 1900, QUdpSocket::ShareAddress); //Renvoi false :(
Plusieurs personnes se sont déjà posées la même question, il y a des pistes sur Internet :
- http://stackoverflow.com/questions/1.../qt-udp-socket
- http://www.qtcentre.org/forum/archiv...hp/t-3347.html
- http://bugreports.qt.nokia.com/browse/QTBUG-8652
Malheureusement, la classe QSocketDevice est dépréciée depuis Qt4. Les informations de migrations de Qt3 vers Qt4 pour QSocketDevice ne me permettent pas d'y voir plus clair sur une méthode fonctionelle. J'ai trouvé aussi des infos à propos de ACE, une librairie multiplateforme permettant de mettre en place entre autre l'écoute multicast. Je n'ai pas encore regardé de ce coté, sachant que mon code devra IMPERATIVEMENT tourner sur Windows Mobile, et dans le meilleur des cas sur toutes les plateformes supportées par Qt.
Et comme le bug signalé sur le Bugreport Qt est toujours ouvert et ne semble pas inquiéter grand monde, je désespère de trouver des gens qui auraient rencontré le même cas plus ou moins récemment pour discuter avec eux de leurs éventuelles solutions.
Cordialement,
Antoine
Partager