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


  • Moderators

    @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.


  • Moderators

    @releaZze
    ja, aber warum der connectToHost() Aufruf?!



  • Ahh sry seh ich jetzt gerade, den hab ich versuchsweiße reingeschrieben.
    Hat mit dem Problem nix zu tun, gut aufgepasst ;)

    Kennen Sie sich mit der einbindung von PCAP unter QT aus ?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.