Seite 1 von 1

[gelöst] QTcpSocket - Packete werden verschluckt

Verfasst: 8. Januar 2012 12:24
von Tilman Räger
Hallo,

ich bin gerade dabei zwei Anwendungen zu erstellen, die über eine Socket-Verbindung miteinander kommunizieren. Bisher hat das ganze auch ganz gut funktioniert, 2 Anfragen innerhalb kurzer Zeit - die Antwort kam perfekt an - also kein Problem.
Nun habe ich eine 3. Anfrage eingefügt - mit dem Erfolg, das die Antwort auf die mittlere Antwort nicht mehr empfangen wird. Über Wireshark ist jedoch eindeutig feststellbar, dass alle Antworten korrekt versendet werden, doch der Slot, der den Empfang der Antwort verarbeiten soll, wird nur 2mal angesprochen.
Gibt es irgendwelche Einschränkungen, dass sich senden und empfangen nicht überschneiden darf o.ä.? Um sicherzustellen, dass die Daten auch sofort rausgehen, schliesse ich jede Anfrage mit einem flush() ab - vielleicht ist das ja das Problem?

Für alle Antworten schon mal im Voraus vielen Dank

Gruss
Tilman (Räger)

Re: QTcpSocket - Packete werden verschluckt

Verfasst: 8. Januar 2012 13:14
von franzf
Wie immer bei solchen Sachen:
Bitte Code posten, am besten in Form eines minimalen, kompilierbaren Beispiels.

Re: QTcpSocket - Packete werden verschluckt

Verfasst: 8. Januar 2012 15:44
von Tilman Räger
hallo,
Code posten ist leider schwierig - bis ich das herausgezogen habe, das ich das Problem nachstellen kann, bin ich vermutlich einen guten Tag beschäftigt :-(

Ncóch einmal zur verdeutlichung: Die anfordernde Anwendung (hier liegt wohl das Problem) besitzt einen separaten Thread für die Kommunikation. Dieser sendet die Anfrage getriggert durch ein Signal des Hauptthreads, liest dann die ankommenden Daten ein, bereitet sie ein wenig auf (Entfernen der Zeilenenden, zusammenpacken in eine StringList) und sendet sie dann via Signal an den Hauptthread.
So weit - so gut.
In der Routine, die die Daten einliest, wird direkt nach dem Einlesen einer Zeile diese per qDebug ausgegeben. Und hier erscheinen die von der anderen Anwendung gesendeten Daten nie - obwohl sie sich lt. Wireshark manchmal sogar im selben Datenpaket befinden, wie die Daten der folgenden Abfrage die einwandfrei ausgewertet werden.
Mir kommt es so vor, als würden diese Daten durch irgendetwas aus dem Lesepuffer entfernt - mglw. ein flush()-Befehl.

Die Frage ist, ist so etwas möglich und was habe ich generell bei so einer Vollduplex-Kommunikation zu beachten?

Gruss
Tilman Räger

Re: QTcpSocket - Packete werden verschluckt

Verfasst: 8. Januar 2012 21:06
von Christian81
Ein flush() sorgt nur dafür dass der Sender auch wirklich alle seine Puffer leert und alles gesendet wird - mehr nicht.
Und ein QTcpSocekt verschluckt nichts und man muss auch nicht wirklich was beachten - da hilft wohl, wie schon gesagt, nur runterbrechen auf ein Testcase bzw. etwas Debuggen - QTcpSocket bringt ja genug Infos mit (z.B. bytesAvailable() und co)

Re: QTcpSocket - Packete werden verschluckt

Verfasst: 9. Januar 2012 10:41
von Tilman Räger
Hallo,

Das Problem ist gelöst. Nachdem ich bei den Sockets in der falschen Richtung gesucht habe (die waren nun wirklich nicht schuld :-), bin ich bei der Verarbeitung der Antworten fündig geworden. Trotzdem haben die Antworten sehr geholfen das Problem zu verstehen bzw. in der richtigen Richtung zu suchen.

Gruss
Tilman Räger