QString über QTcpSocket [gelöst]

Alles rund um die Programmierung mit Qt
Antworten
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

QString über QTcpSocket [gelöst]

Beitrag von speedy »

Hallo

ich würde gerne ein QString über QTcpSocket senden.
Momentan kommt das auch in meinem anderen Programm an.

Code: Alles auswählen

int i;
for (i = 0; i < socketlist.size(); i++)
	{
	socketlist.at(i)->write(QString("Ping").toUtf8());
	}
}
Im anden Programm sehe ich das erstmal als Hex.
Aber eine Prinzipielle Frage hab ich da...
ist das besser mit ".toUtf8()" oder mit ".toAscii()" oder mit ".toLatin1()" ?

oder ist das eine Glaubensfrage ...

mfg speedy
Zuletzt geändert von speedy am 30. April 2009 15:36, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es kommt drauf an was Du schickst - wenn es nur ASCII-Daten sind reicht .toAscii(). Am sinnvollsten ist natürlich utf-8. Kommt allerdings auch drauf an ob spezifiziert wurde was gesendet werden soll.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag von speedy »

hmm ich glaub es wird was komplizierter.
Ich muss warscheinlich 2 * int, 1 QString und 2*bool verschicken.
Überleg mir jetzt erstmal wie ich das sinvoll in ein QByteArray packe.
Vielleicht schreib ich noch die versendete länge am Anfang mit rein...
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag von gerome69 »

Wie wäre es, das ganze in ein XML zu packen und in einem Rutsch als Bytearray zu schicken und auf der anderen Seite wieder zu dekodieren?

<data>
<myString>Der String</myString>
<myInt>1234</myInt>
</data>

Gruß, Gérôme
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag von speedy »

Naja ich habs jetzt etwas anders gelöst.
Aber Ähnlich.
Ich Packe alles in ein QString
Jedes Datenpaket hat ein <START> und ein <END>
dazwischen hab ich meine Daten jeweils mit einem * getrennt.
Mein QString hat sonst auch keine * Zeichen, daher ist das kein Problem.
Hab nur gemerkt das manchmal mehr als nur ein Datenpaket auf einmal ankommt.

Muss nur noch den Teil der da zwischen kommt an den * dingern wieder auseinander schneiden und noch checks machen ob das vernünftige Daten sind.

Sollte ich noch Checksummen machen?
Oder ist das ein wenig übertrieben ...
speedy
Beiträge: 52
Registriert: 23. Juli 2008 03:17

Beitrag von speedy »

so geschafft.
Die Daten werden jetzt richtig erkannt und können somit auch das SIGNAL in meinem Client starten ^^
Das sollte doch erstmal langen für heute.
... oh man schon 4 Uhr ... mein Bett ruft schon.

Code: Alles auswählen

QByteArray einzeldata;
printf ("es kommen Daten an:\n");
QByteArray bytedata = socket->readAll();
bytedata = bytedata.trimmed();

//QString rohdaten = QString::fromUtf8(bytedata);
//ausgabefeld->append(rohdaten);
int startpos,endpos;


while (bytedata.size() > 0)
	{
	startpos = bytedata.indexOf("<START CAN>");
	endpos = bytedata.indexOf("<END CAN>");
	printf("startpos = %i endpos = %i\n",startpos,endpos);
	if ( (startpos > -1) && (endpos > startpos) )
		{
		einzeldata = bytedata.mid(startpos + 11, endpos - startpos - 11);
		bytecaninterpreter(einzeldata);
		if (bytedata.size() > (endpos + 9))
			{
			bytedata = bytedata.right(bytedata.size() - endpos - 9);
			}
		else bytedata.clear();
		}
	else
		{
		ausgabefeld->append("ERROR: Incompatible Daten per TCP empfangen. Daten werden verworfen");
	//	ausgabefeld->append(QString::fromUtf8(bytedata));
		printf("Incompatible Daten per TCP empfangen!!! Daten werden verworfen.\n");
		bytedata.clear();
		}
	}
Edit:
hmm ... anscheinend geht meine PC Uhr vor ... ist ja erst 3:49
Antworten