Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Problem beim Empfangen eines UDP Paket
Forum Updated to NodeBB v4.3 + New Features

Problem beim Empfangen eines UDP Paket

Scheduled Pinned Locked Moved Unsolved German
5 Posts 2 Posters 2.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    releaZze
    wrote on last edited by
    #1

    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

    raven-worxR 1 Reply Last reply
    0
    • R releaZze

      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

      raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #2

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

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      1 Reply Last reply
      0
      • R Offline
        R Offline
        releaZze
        wrote on last edited by
        #3

        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.

        raven-worxR 1 Reply Last reply
        0
        • R releaZze

          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.

          raven-worxR Offline
          raven-worxR Offline
          raven-worx
          Moderators
          wrote on last edited by
          #4

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

          --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
          If you have a question please use the forum so others can benefit from the solution in the future

          1 Reply Last reply
          0
          • R Offline
            R Offline
            releaZze
            wrote on last edited by
            #5

            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 ?

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved