[gelöst] QTcpSocket - Packete werden verschluckt

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

[gelöst] QTcpSocket - Packete werden verschluckt

Beitrag 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)
Zuletzt geändert von Tilman Räger am 9. Januar 2012 10:42, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QTcpSocket - Packete werden verschluckt

Beitrag von franzf »

Wie immer bei solchen Sachen:
Bitte Code posten, am besten in Form eines minimalen, kompilierbaren Beispiels.
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: QTcpSocket - Packete werden verschluckt

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTcpSocket - Packete werden verschluckt

Beitrag 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)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: QTcpSocket - Packete werden verschluckt

Beitrag 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
Antworten