Seite 1 von 1

QTcpSocket übertragung der Daten

Verfasst: 4. September 2009 10:28
von flownfluid
Hallo zusammen, ich hab da mal ne frage zu dem Tcp Socket von QT.

Ich schreibe ja meine Daten in einen QByteArray und sende den über QTcpSocket zum anderen Client.
Es ist doch so, dass das TCP- Protokoll die Daten in Packete aufteilt, diese versendet und an das Program auf der "anderen Seite" übergibt.

Jetzt bekomment man ja von QTcpSocket das Signal readyRead wenn etwas angekommen ist.
Frage bekommt man dieses Signal erst wenn der ganze QByteArray gesendet wurde oder einfach ein Packet eingetroffen ist?
Sprich muss man das richtige zusammensetzen vom QByteArray selber in "die Hand" nehmen?

Ich hoffe ich hab mich da einwenig verständlich ausgedrückt ;-)
Danke schon mal

Verfasst: 4. September 2009 13:32
von flownfluid
Nach einer längeren Testphase bin ich zum folgenden Resultat gekommen.

QT teilt das zusendete Datenpacket automatisch in Teilpackete aber beim Empfänger muss man diese Teilpackete selber wieder zum Datenpacket zusammenführen.

Auf Grund von diesem Verhalten, habe ich noch zwei Fragen:

- Ist es garantiert das die Teilpackete immer der Reihenfolge ankommen, oder kann es möglich sein das ein Teilpacket ein anderes "überholt"

- Um eine sichere Übertragung zu gewährleisten, muss ich ja diese Packete selber, vor dem Senden in Teilpackete aufteilen und diese auch identifizieren. Gibt es eine Möglichkeit die max. Packetgrösse herauszufinden?

Vielen Dank schon mal

Verfasst: 4. September 2009 14:21
von upsala
Hast du dich eigentlich schon mal mit TCP beschäftigt?

Verfasst: 4. September 2009 15:00
von flownfluid
Nein, ich fange erst gerade einmal mit diesem Thema an. So denke ich auch das zum grössten Teil meine Fragen auch recht blöde sind. Aber ich kenn mich da praktisch überhaupt nicht aus und somit poste ich hier mal meine Fragen in der Hoffnung das mir jemand weiterhelfen kann.

Schlussendlich will ich eine TCP-Socketverbindung verwirklichen, die recht flexibel ist. Mir ist auch klar das ich selber ein Protokoll schreiben muss. Jedoch kann ich das erst wenn eben die obigen Fragen geklärt worden sind.

Laut mir ist es ja möglich das bei einer TCP-Socketverbindung ein Packet das Andere überholen kann. Jetzt könnte es ja möglich sein das QT dies schon abfängt und handelt. So das man sich um diesen Fall gar nicht zu kümmern muss.

Zudem finde ich auch das wenn QT die Fragmentierung der Daten auf der Senderseite übernimmt, das es schon fast logisch wäre dies auch auf der Empfängerseit zu übernehmen...

Es tut mir leid das ich hier eventuell ein paar blöde Fragen stelle. Aber irgendwie finde ich auf diese Probleme nicht wirklich ne gute Lösung...

Gruss flownfluid

Verfasst: 5. September 2009 13:33
von solarix
Was dir upsala mitteilen wollte: das hat nichts mit Qt zu tun...

Folgendes:
1. Das Zerstückeln macht TCP, nicht Qt.
2. TCP kümmert sich selbst um die korrekte übertragung der Datenpackete. Daher: bei deinem Qt-Client kommen die Daten zwar zerstückelt, aber in der gleichen Reihenfolge wie beim Versenden an.
3. Auf der Client-Seite weiss Qt ja nicht, was für Daten versendet wurde. Also musst DU ein Protokoll definieren und die Daten entsprechend zusammensetzen.
4. Einfache Protokolle (z.B. [Länge][Daten][Länge][Daten].....) wurden schon mehrfach in diesem Forum besprochen. Also: Forensuche.