[Qt-interest] large xml over the network - problem
Jason H
scorp1us at yahoo.com
Wed Apr 27 16:17:13 CEST 2011
Why in the world are you doing that?
server side, just do:
out<< xml.toString().toUtf8();
client side:
QBuffer buffer;
in >> buffer;
QDomDocument xml;
xml.setContent(buffer.toString());
----- Original Message ----
From: franki <franki at franki.eu.org>
To: qt-interest at trolltech.com
Sent: Wed, April 27, 2011 10:08:35 AM
Subject: [Qt-interest] large xml over the network - problem
Hi all,
I have client-server application which exchange data using xml's over the net.
With relatively small xml's everything goes fine, but when I try to send big
ones there is problem with receiving it (not always just from time to time),
and if I double the size of xml, they are always lost.
Snippet of code on server side:
void NetThread::sendToClient(QDomDocument xml) {
QByteArray block;
QDataStream out(&block, QIODevice::ReadWrite);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << xml.toString();
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
qDebug() <<" quint size:"<<(quint16)(block.size() - sizeof(quint16))
qDebug() <<" block size:"<<block.size();
qDebug() <<" string size:"<<xml.toString().size();
tcpSocket->write(block);
}
code on client side look's like this (dataSize is quint16):
void NetManager::readData() {
QDataStream in(socket);
in.setVersion(QDataStream::Qt_4_0);
if (dataSize == 0) {
if (socket->bytesAvailable() < (int)sizeof(quint16))
return;
in >> dataSize;
}
if(socket->bytesAvailable() < dataSize)
return;
QString text;
in >> text;
qDebug() << " dataSize:"<<dataSize<<" received:"<<text;
dataSize=0;
this->parseData(text);
if(socket->bytesAvailable())
this->readData();
}
On the server side, during transmission debug says:
quint size: 3958
block size: 69496
string size: 34745
On client side when there is successful transmision I got:
NetManager::readData dataSize: 3958 received: "very long_xml_string"
When there is problem with transmission I got:
Debug: NetManager::readData bytes: 3958 received: ""
Debug: NetManager::parseData parse error
Debug: NetManager::readData bytes: 61 received: ""
Debug: NetManager::parseData parse error
Debug: NetManager::readData bytes: 51 received: ""
Debug: NetManager::parseData parse error
Debug: NetManager::readData bytes: 56 received: ""
Debug: NetManager::parseData parse error
So in second example the packet length is the same 3958 but the function is
called 4 times and I'm quite sure that application on server side doesn't
send anything except for this xml.
So please can someone point me on my errors?
best regards
Marek
_______________________________________________
Qt-interest mailing list
Qt-interest at qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list