Wie kann ich das senden und empfangen von UDP-Paketen in QT
Schreibe ich eine kleine Anwendung in QT, sendet ein UDP-Paket die Sendung über das lokale Netzwerk und wartet auf eine UDP-Antwort-Paket aus einem oder mehreren Geräten über das Netzwerk.
Erstellen des sockets und das senden der broadcast-Paket.
udpSocketSend = new QUdpSocket(this);
udpSocketGet = new QUdpSocket(this);
bcast = new QHostAddress("192.168.1.255");
udpSocketSend->connectToHost(*bcast,65001,QIODevice::ReadWrite);
udpSocketGet->bind(udpSocketSend->localPort());
connect(udpSocketGet,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams()));
QByteArray *datagram = makeNewDatagram(); //data from external function
udpSocketSend->write(*datagram);
Die Anwendung sendet das Paket richtig und die Reaktion Paket ankommt, aber die readPendingDatagrams()
Funktion wird nie aufgerufen. Ich habe überprüft die Pakete werden gesendet und empfangen über Wireshark und die Anwendung hört auf den port, angegeben in wireshark, Process Explorer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst. Hier ist die Lösung.
Des Gerätes am Netzwerk lauscht auf port 65001 und reagiert auf Pakete auf der source-Anschluss des empfangenen Pakets. Es ist notwendig, um
connectToHost(...)
um zu wissen, welchen port zu binden, für das Antwortpaket.Ist es auch notwendig, zu binden, um die richtige Adresse und einen port zum empfangen der Pakete. Das war das problem.
Sind Sie verbindlich Ihre
udpSocketSend
imQIODevice::ReadWrite
- Modus. So das ist das Objekt, die gehen, um den Empfang der Datagramme.Versuchen:
udpSocketGet
vollständig).abhängig von Ihren Einschränkungen.