Ich versuch mich grad an einer Client-Server Anwendung, wo ich auf der einen Seite mit QXmlStreamWriter ueber Socket raussschreibe und auf der anderen Seite mit QXmlStreamReader wieder einlese. Die "XML"-Nachrichten haben z.B. die Form
Code: Alles auswählen
<Login name="login" pass="pass"></Login>Wenn ich jetzt ueber telnet obengenannten String zweimal kurz hintereinander mit Enter getrennt an den Server schicke, dann hat der QXmlStreamReader kein Problem mit den Nachrichten.
Wenn ich sie allerdings in der Form
Code: Alles auswählen
<Login name="login" pass="pass"></Login><Login name="login" pass="pass"></Login>Code: Alles auswählen
"Extra content at end of document."Der Part, wo die Nachricht im Server geparsed wird, sieht so aus:
Code: Alles auswählen
qDebug() << "Incoming Message from " << getPeer();
QXmlStreamReader reader;
reader.setDevice(m_tcpSocket);
QString element;
QXmlStreamAttributes attributes;
while (!reader.atEnd() && !reader.hasError())
{
reader.readNext();
if (reader.tokenType() == QXmlStreamReader::StartElement)
{
element = reader.name().toString();
attributes = reader.attributes();
}
if (reader.tokenType() == QXmlStreamReader::EndElement)
{
bool incoming = true;
Message *msg = new Message(element, attributes, m_tcpSocket, incoming);
MessageQueue::getInstance()->addMessage(msg);
}
}
if (reader.hasError())
{
//processIncoming();
qDebug() << "Processing message from " << getPeer() << " failed: "
<< reader.errorString();
return;
}