3 votes

Diffusion UDP avec QT

Je cherche depuis deux jours comment envoyer un broadcast UDP. J'ai vu beaucoup d'exemples (aussi les broadcastReceiver et broadcastSender sur le site de qt) mais ils ne fonctionnent toujours pas pour moi. Lorsque j'essaie d'envoyer un broadcast, la méthode QUdpSocket::writeDatagram(..) renvoie -1 et les données ne sont pas transmises. Je suis sur ubuntu 14.04 x64. J'aimerais savoir s'il y a une manipulation particulière à faire pour que ce broadcast fonctionne. Merci et désolé pour mon niveau d'anglais.

voici mon code

 envoyeurUDP=new QUdpSocket(this);
recepteurUDP=new QUdpSocket(this);
//démarrage du serveur pour UDP
if (!recepteurUDP->bind(QHostAddress::AnyIPv4,7878,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint)) {
  qDebug("Impossible de créer la socket en écoute");
 exit(EXIT_FAILURE);
}

connect(recepteurUDP, SIGNAL(readyRead()), this, SLOT(lireDatagrams()));
void FileTransferManager::lireDatagrams(){

char* donnees;
while (recepteurUDP->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(recepteurUDP->pendingDatagramSize());
        recepteurUDP->readDatagram(datagram.data(), datagram.size());
        donnees=datagram.data();
    }}

et celui-ci pour envoyer des datagrammes

void FileTransferManager::sendDatagram(string msg, QHostAddress addr){
QByteArray datagram=msg.data();
    qint64 r=envoyeurUDP->writeDatagram(datagram.data(), datagram.size(),  addr, 7878);}

et je l'utilise comme suit :

fileManager.sendDatagram("blabla",QHostAddress::Broadcast);

Voici le résultat de ma commande ifconfig :

eth0 Link encap:Ethernet HWaddr f8:a9:63:2d:89:ff
UP BROADCAST MULTICAST MTU:1500 Metric:1 Packets reçus:0 erreurs:0 :0 overruns:0 frame:0 Paquets TX:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 transmission de fichiers lg:1000 Octets reçus:0 (0.0 B) Octets transmis:0 (0.0 B)

lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hôte UP LOOPBACK RUNNING MTU:65536 Metric:1 Packets reçus:5311 erreurs:0 :0 overruns:0 frame:0 TX packets:5311 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 Octets reçus:661728 (661.7 KB) Octets transmis:661728 (661.7 KB)

wlan0 Link encap:Ethernet HWaddr b8:ee:65:ab:4f:77
inet adr:10.42.0.1 Bcast:10.42.0.255 Masque:255.255.255.0 adr inet6 : fe80::baee:65ff:feab:4f77/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Packets reçus:14069 erreurs:0 :0 overruns:0 frame:0 Paquets TX:15529 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 transmission de fichiers lg:1000 Octets reçus:6007592 (6.0 MB) Octets transmis:2307422 (2.3 MB)

0voto

DMacAttack Points 33

Je sais que c'est vieux, mais cela fonctionne pour moi sur Ubuntu 16.04 LTS pour diffuser des messages à n'importe quel auditeur :

QUdpSocket *udp = new UdpSocket(this);
QByteArray dgram = "hello";
udp->writeDatagram(dgram.data(), dgram.size(), QHostAddress::Broadcast, ipPort);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X