[C++/Qt] readyRead wird bei UDP-Broadcast nicht getriggert

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von BuffaloBill, 28. Januar 2014 .

Schlagworte:
  1. 28. Januar 2014
    Hallo Leute,

    ich hänge an einem ziemlich hässligen Problem bei meinem Programm.

    Folgendes passerit grundsätzlich:

    1. Warten auf UDP-Broadcast Nachrichten (funktioniert nicht)
    2. Je nach Inhalt der Nachricht eine Nachricht an einen anderen UDP-Port senden
    3. Nachrichten an UDP-Broadcast senden (funktioniert)
    4. Dauerhafte TCP-Verbindung mit anderem Programm

    Hier der Code-Schnippsel um den es geht:

    Code:
     client = new QUdpSocket(this);
    
     clientHost = "192.168.0.98"; //zum testen die IP des sendenden rechners, geht aber auch nicht
     clientPort = 9011;
    
     client->connectToHost(QHostAddress::Broadcast, 9011);
     client->bind(9011, QUdpSocket::DefaultForPlatform);
     int i = client->BoundState;
    
     connect(client, SIGNAL(readyRead()), this, SLOT(on_client_readyRead()));
    
     if (client->state()==QUdpSocket::ConnectedState)
     qDebug() << "Connected";
     else
     exit(-1);
    
     qDebug() << "Startup... " << clientPCP->peerAddress().toString() << clientPCP->peerPort() << i;
    
     QByteArray buffer;
    
     buffer = "Test123";
     client->writeDatagram(buffer, QHostAddress::Broadcast, 9011);
    Er gibt mir Connected aus, hat als IP 255.255.255.255:9011 und BoundState 4.

    Er sendet auch einwandfrei und wie erwartet (allerdings mit Source port:62244 ?).

    Im Netzwerk sind auch Nachrichten vorhanden (mit wireshark gecheckt), aber readyRead oder hasPendingDatagrams wird nie getriggert.

    Hat einer ne Idee?
     
  2. 28. Januar 2014
    AW: [C++/Qt] readyRead wird bei UDP-Broadcast nicht getriggert

    Deine Parameterreihenfolge von bind ist falsch.

    Wenn du connectToHost verwendest dann musst du die IO Funktionen read, write, etc. verwenden.
    Ich würde die Funktion gar nicht verwenden, da dies anscheinend noch andere Auswirkungen hat.

    Ansonsten sind hier zwei Beispiele wie man damit arbeitet:
    Qt 4.6: Broadcast Sender Example
    Qt 4.6: Broadcast Receiver Example

    Mfg Rushh0ur
     
  3. 28. Januar 2014
    Zuletzt bearbeitet: 29. Januar 2014
    AW: [C++/Qt] readyRead wird bei UDP-Broadcast nicht getriggert

    Danke dir schon mal, ich wusste doch hier war wer der sich mit Qt auskennt nur der Name war mir entfallen.

    Ich habe jetzt schon soviel hin und her programmiert, kann sein das ich das bind schon mal richtig hatte, aber ich werde es morgen nochmal kontrollieren.
    Wie gesagt, writeDatagramm funktioniert einwandfrei.

    Die Beispiele habe ich mir schon mal angeguckt und bin eigentlich auch dementsprechend vorgegangen.
    Ich habe auch ein lauffähiges Programm, welches problem über UDP sendet und empfängt, nur beim dem blöden Broadcast will es nicht funktionieren.

    Wenn ich morgen alles probiert habe editiere ich hier mal, vielleicht gibts ja noch Ideen.

    Das letzt was ich machen möchte ist mein ganzen Programm am Ende mit den Windows Bibliotheken Programmieren zu müssen, nur weil der scheiß nicht will. ;(


    Habe jetzt das Problem gefunden und lösen können.

    Folgendes habe ich gemacht:
    Code:
    client->bind(QHostAddress::Broadcast, 9011);
    qDebug()<<client->errorString();
     qDebug()<<client->error();
    Sagt mir "QAbstractSocket::SocketAddressNotAvailableError"

    Also bind wie folgt geändert:
    Code:
    client->bind(QHostAddress::Any, 9011);
    Und siehe da es geht. Ich weiß zwar nicht so recht warum, aber es geht.
    Ich bin mir auch ziemlich sicher, dass ich das schon mla irgendwoe stehen hatte, aber gut jetzt geht's erstmal weiter.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.