[sloved] QTcpSocket verliert die Daten

Verschiedenes zu Qt
Antworten
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

[sloved] QTcpSocket verliert die Daten

Beitrag 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
Zuletzt geändert von jd am 23. Mai 2008 11:11, insgesamt 1-mal geändert.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Der String wird vermutlich irgendwo überschrieben.
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

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

Beitrag von Christian81 »

Du erwartest sofort nach einem connectToServer() eine Antwort?? Wie soll das gehen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
jd
Beiträge: 130
Registriert: 22. Januar 2008 17:55

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