Merkwürdiges Verhalten der Netzwerk-Funktionen

Alles rund um die Programmierung mit Qt
Antworten
prof_maad
Beiträge: 40
Registriert: 25. September 2005 14:33
Wohnort: /root/

Merkwürdiges Verhalten der Netzwerk-Funktionen

Beitrag 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
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag 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?
Glaube an eine Lösung, nur dann kannst du auch eine finden.
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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
prof_maad
Beiträge: 40
Registriert: 25. September 2005 14:33
Wohnort: /root/

Beitrag von prof_maad »

Das Problem lag scheinbar nur an meinem Rechner.

Auf allen anderen funktioniert es tedellos.

Danke trotzdem und Ciao,

Prof. MAAD
Emperor_L0ser
Beiträge: 51
Registriert: 28. Juli 2005 12:26
Kontaktdaten:

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