Problem beim Empfangen eines UDP Paket
-
Hallo
Ich hab ein Problem beim Empfangen eines UDP-Packet, welches von einem Eval-Board geschickt wird.
Mein Programm sieht folgendermaßen aus:void MyUDP::openConnection() { socket = new QUdpSocket(this); if (!socket->bind(QHostAddress("192.168.178.64"), 2080)) { qDebug() << "Could not start the server."; } else { socket->connectToHost(QHostAddress::Any, 2080); connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead())); qDebug() << "Listen on Port 2080"; } }
void MyUDP::readyRead() { QByteArray buffer; QHostAddress sender; quint16 senderPort; while (socket->hasPendingDatagrams()) { // when data comes in buffer.resize(socket->pendingDatagramSize()); socket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort); } qDebug() << "Message from: " << sender.toString(); qDebug() << "Message port: " << senderPort; qDebug() << "Message: " << buffer.toHex(); }
Dabei wird auf die IP Adresse ..178.64 und dem Port 2080 gehört.
Wenn ich das Programm ausführe, erscheint ,,Listen on Port 2080" aber keine Daten werden empfangen.Wenn ich jetzt Wireshark auf dem Netzwerkadapter sniffen lasse mit dem Promiskutieven Modus dann empfängt das Programm auf einmal Daten.
Meine Frage ist jetzt ob es eine Möglichkeit per QT den Promiskutieven Modus anzuschalten.
Desweiteren hab ich schon versucht mit Pcap zu sniffen.
Hier mal der Ausschnitt der .pro Datei:QT += core QT -= gui QT += network CONFIG += c++11 TARGET = PCAP CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp INCLUDEPATH += "C:/link/zum/includeordner/INCLUDE" LIBS += -L "C:/link/zum/libordner/Lib" -lwpcap -lpacket DEFINES += WPCAP
Wenn ich nun folgenden Code ausführe:
#include <stdio.h> #include <pcap.h> int main(int argc, char *argv[]) { char *dev, errbuf[PCAP_ERRBUF_SIZE]; dev = pcap_lookupdev(errbuf); if (dev == NULL) { printf("Couldn't find default device: %s\n", errbuf); return(2); } printf("Device: %s\n", dev); return(0); }
kommt auf der Console nach dem ausführen: Enter drücken zum schließen.
Die frage ist jetzt ob ich einen anderem Compilierer benötige oder doch etwas ganz anderes.
Vllt hatte jmd schon das vergnügen ein UDP Paket mit pcap zu empfangen und könnte mir ein kleines Tut schreiben
Danke im vorraus.
Mit freundlichen Grüßen
-
@releaZze said in Problem beim Empfangen eines UDP Paket:
MyUDP::openConnection()
diese methode verstehe ich nicht. Warum das if-else?!
Der server sollte bind() vernden. Der client connectToHost(). When der Server erfoglreich bind() ausgeführt hat, macht dein Code allerdings keine Connection zum readyRead() signal...Versuchst du Client und Server auf dem selben Rechner laufen zu lassen?
-
Hallo
danke für Ihre Antwort.
Ich hab die Methode nur so genannt für die initialisierung des UDPSocket (bind, connect).Der Client ist ein Board das ich per Netzwerkkabel an den PC anschließe, welches im Sekundentakt UDP Pakete schickt.
Der PC stellt also den Server dar.Der PC macht alles super, er macht ein bind und wartet dann auf des readyRead.
Dieses kommt aber erst wenn ich mit Wireshark den Promiskutieven Modus einschalte.
-
@releaZze
ja, aber warum derconnectToHost()
Aufruf?!