Netzwerkprogrammierung mit QT

cesupa

Erfahrenes Mitglied
Hallo,

ich versuche ja seit geraumer Zeit ein Datenübertragungsprogramm zu schreiben, das mit der QNetwork library sowie QThreads arbeitet. Ich hab jetzt aber ein Problem beim versenden einer Struktur:

Struktur "info" versenden:
Code:
QByteArray info((char*)&inf,sizeof(inf));   //Struktur in QByteArray einlesen

int s=socket.write(info);                        //versenden
//emit error(5,itoa(s,buf,10));                 //versendete Bytes ausgeben (332 Bytes)

socket.disconnectFromHost();             //Verbindung trennen
socket.waitForDisconnected();

Hier hab ich schonmal eine Frage: Ist es wirklich nötig, die Verbindung zu trennen, damit die Daten gesendet werden?

Struktur "info" empfangen:
Code:
info inf;
QByteArray infobytes((char*)&inf,sizeof(inf));  //struktur in QByteArray laden
	
	while(socket.bytesAvailable()<infobytes.size())          //Daten empfangen (332 Bytes)
	{
		if(!socket.waitForReadyRead(Timeout))
		{
			emit error(socket.error(),socket.errorString());
			return;
		}
	}
					
	QDataStream in(&socket);
	in.setVersion(QDataStream::Qt_4_0);
					
	in>>infobytes;               //empfangene Daten auslesen und in QByteArray schreiben
	inf=*(info*)infobytes.constData();  //Struktur auslesen
	emit error(5,infobytes.data());      //für versuchszwecke

	//emit error(5,inf.get_filename()); //Ausgabe zum Test("")

So, hier hab ich mein eigentliches Problem(vermute ich mal), also die Daten kommen schonmal an, das sind die gewünschten 332Bytes. Problem ist nur, dass dann später beim Auslesen die Struktur leer ist. Kann mir da jemand helfen?

Die Sende-und die Empfangsroutine laufen in je einem Thread.

Gruß
cesupa
 
Hi.
Hier hab ich schonmal eine Frage: Ist es wirklich nötig, die Verbindung zu trennen, damit die Daten gesendet werden?
Nein, ein einfaches flush() sollte reichen.
So, hier hab ich mein eigentliches Problem(vermute ich mal), also die Daten kommen schonmal an, das sind die gewünschten 332Bytes. Problem ist nur, dass dann später beim Auslesen die Struktur leer ist. Kann mir da jemand helfen?
Wenn du vom QDataStream das QByteArray einlesen willst, sollte zuerst die Größe der Bytes im Stream stehen und danach die Bytes.. Siehe http://doc.trolltech.com/4.3/datastreamformat.html

Gruß
 
Zurück