Seite 1 von 1

Merkwürdiges Verhalten der Netzwerk-Funktionen

Verfasst: 4. April 2006 18:45
von prof_maad
Hallo alle miteinander,

ich sitze gerade vor meinem Projekt und ein scheinbar unbegründeter Fehler treibt mich zur WeißGlut.

Ich habe ein Programm, dass über QTcpSocket zu einem Server verbindet und von diesem Daten empfängt.
Diese kommen nur selten komplett an, meistens werden nicht die gesamten Daten erhalten.
Es tritt zufällig auf.
Mal geht es, mal nicht, die Stellen an denen die Daten aufhören scheinen jedoch immer gleich zu sein.
Ich habe keine Ahnung, woran das liegen kann.

Hier die Empfangsfunktion:

Code: Alles auswählen

QString returnString;
    
    returnString = QString(QString::fromUtf8(socket->readAll()));
    
    if(returnString.endsWith("%#"))
    {
    	returnString.chop(2);
    }
    
    return returnString;
Wenn jemand eine Idee hat, woran es liegen könnte, wäre ich sehr dankbar.

EDIT:
Ich habe mittlerweile festgestellt, dass alle Daten korrekt vom Server versendet werden, der Client jedoch nicht alles empfängt.

Ciao und Danke im Voraus,

Prof. MAAD

Verfasst: 4. April 2006 23:07
von Esleborn
könnte es wohl sein, dass der Client halt noch nicht alles empfangen hat...? Sprich halt erst die ersten 20% empfanen hat, dann diese Funktion aufruft um dann erst danach den Rest zu erhalten?

Verfasst: 6. April 2006 02:00
von Nassian
Das Betriebssystem (vermute ich) splittet gesendete Daten auf, folglich kann es ab einer gewissen Datenmenge vorkommen, dass du deine Daten beim Client in mehreren Schüben bekommst. Du musst also sicherstellen, dass du alle Daten beisammen hast, bevor du weitermachst.

Ich habe das so gelöst, dass ich einen bestimmten ASCII Code ans Ende meiner Requests hänge und zwischen denen ist immer ein Request. Funktioniert freilich nur mit Textnachrichten. Kommt (Binär)Datenübertragung ins Spiel musst du die Datei- oder Datengröße übermitteln und dementsprechend Daten empfangen lassen.

SG Alexander

Verfasst: 6. April 2006 16:57
von prof_maad
Das Problem lag scheinbar nur an meinem Rechner.

Auf allen anderen funktioniert es tedellos.

Danke trotzdem und Ciao,

Prof. MAAD

Verfasst: 6. April 2006 21:48
von Emperor_L0ser
ich weiss ja nicht was für daten es sind, aber ein sehr beliebter fehler ist wie du es tust QString zu nutzen, wenn ein "\0" zeichen empfangen wird, wird der rest abgetrennt. also erstmal QByteArray verwenden.

mfg Emperor_L0ser