Seite 1 von 1

[sloved] QTcpSocket verliert die Daten

Verfasst: 23. Mai 2008 10:06
von jd
Hallo Gemeinde,

ich habe hier ein Problem mit QTcpSocket... Die Daten werden erfolgreich vom Server empfangen... jedoch gehen die Daten im verlauf verloren.

getData - Slot - Funktion

Code: Alles auswählen

void CTcp::getData() {
	QDataStream in(tcpsocket);
	in.setVersion(QDataStream::Qt_4_0);

	if (blockSize == 0) {
		if (tcpsocket->bytesAvailable() < (int)sizeof(quint16))
			return;
		in >> blockSize;
	}

	if (tcpsocket->bytesAvailable() < blockSize)
		return;
	in >> income; // Die daten sind vollständig vorhanden.
}
Die Daten werden in QString income (income ist private) geschrieben. Die Daten sind in dieser Funktion vollständig und fehlerfrei vorhanden.

Nun habe ich noch eine public Zugriffsmethode um income von einer beliebigen Stelle aufzurufen und damit zu arbeiten.

Code: Alles auswählen

QString CTcp::getDataString() {
	return income; // an dieser Stelle sind die Daten verloren.
}
income ist nun ein leerer QString. Es existiert nur eine Instanz von meinem Objekt. Ich habe es sogar mit static QString income versucht, es ist genau das selbe Problem. Ich habe auch versucht income in eine test variable zu kopieren. Das Problem bleibt. Hat jemand eine Idee woran das liegen kann, das die eingehenden Daten verloren gehen?

so long
jd

Verfasst: 23. Mai 2008 10:11
von PeterLustig
Der String wird vermutlich irgendwo überschrieben.

Verfasst: 23. Mai 2008 10:31
von jd
Das habe ich mir auch gedacht, das ist aber nicht der Fall...

Hier mal meine Zugriffe:

Code: Alles auswählen

tcp = new CTcp(this);

	tcp->connectToServer(configuration->settings.hostname, configuration->settings.port.toInt());

	QString tmp = tcp->getDataString();

	QMessageBox::information(0, tr("test"), tmp);
Wie man sehen kann ist da nichts exotisches.

Kann das an QDataStream liegen? das in >> income das irgendwie nur temporär schreibt? Denn mir kommt das etwas komisch vor, sowie ich die Funktion getData() verlasse, sind auch die Daten von income weg. Ein Zugriffs Problem ist auch nicht vorhanden, das ich es auch mit public QString income versucht habe.

Verfasst: 23. Mai 2008 10:55
von Christian81
Du erwartest sofort nach einem connectToServer() eine Antwort?? Wie soll das gehen?

Verfasst: 23. Mai 2008 11:05
von jd
Ah, ok ich verstehe worauf du hinaus willst. Ich habe in connectToServer Funktion noch tcpsocket->waitForDisconnected(); eingebaut, da der disconnect vom server kommt, wenn die Daten verschickt wurden.

jetzt funktioniert das.

Danke.