Vollständige Version anzeigen : [C++/Qt] readyRead wird bei UDP-Broadcast nicht getriggert


BuffaloBill
28.01.2014, 15:14

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:


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?

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Rushh0ur
28.01.2014, 17:48

Deine Parameterreihenfolge von bind (;qt-project~org/doc/qt-4;8/qudpsocket;html#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.

QUdpSocket::writeDatagram:
Warning: Calling this function on a connected UDP socket may result in an error and no packet being sent. If you are using a connected socket, use write() to send datagrams;


Ansonsten sind hier zwei Beispiele wie man damit arbeitet:
Qt 4;6: Broadcast Sender Example (;doc;qt;digia~com/4;6/network-broadcastsender;html)
Qt 4;6: Broadcast Receiver Example (;doc;qt;digia~com/4;6/network-broadcastreceiver;html)

Mfg Rushh0ur


BuffaloBill
28.01.2014, 20:44

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:

client->bind(QHostAddress::Broadcast, 9011);
qDebug()<<client->errorString();
qDebug()<<client->error();


Sagt mir "QAbstractSocket::SocketAddressNotAvailableError"

Also bind wie folgt geändert:
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.


Ähnliche Themen zu [C++/Qt] readyRead wird bei UDP-Broadcast nicht getriggert
  • [Java] Broadcast Receiver & MainActivity
    Hi;all, Zurzeit bastle ich an einer kleinen Helfer App für Android. Ich habe eine Main Routine und einen BroadCast Receiver (dieser läuft einfach im Background). Ich starte also die Main Routine und ab einem gewissen Punkt im Code muss ich auf ein SMS warten, dass der Broadcast Receiver auch er [...]

  • Broadcast - Toten Panning Topologie
    Hi brauche nen Vergleich zwischen der Broadcast und Toten Panning Topologie, wäre schön wenn ihr mir da helfen könntet, habe schon gegoogelt, aber nichts gefunden. Danke [...]

  • [Linux] Internet Broadcast
    Ich suche eine program für ubuntu damit ich einen radiosender machen kann;wie z;b. Sam4 (Internet Broadcast ) Danke [...]

  • mac broadcast flooding
    Hi kennt jemand nen prog (egal ob linux/windows) um einen broadcast per mac adresse mit gefälschtem absender zu starten? codeschnipsel würden mir auch schon helfen. danke schonmal im voraus [...]



raid-rush.ws | Imprint & Contact pr