我们正在编写一个项目,其中有一个客户机生成xml请求,将其发送到服务器,服务器解析请求并以xml字符串形式返回请求的信息。
当xml回复很小时,应用程序运行良好,但是当它们超过2500个字符时,它们有时会在客户端被切断。我之所以说有时是因为当客户机和服务器运行在同一台机器上,并通过家庭地址127.0.0.1进行通信时,对回复的解析就很好了。但是,当客户机和服务器在不同的机器上并通过局域网进行通信时,这是客户机将消息剪切为大约2500个字符的时候。
通信由tcp套接字完成。我们使用Qt,客户端有一个qtcsocket,服务器有一个qtcserver和一个指向qtcsocket的指针。
我们认为解决这个问题的一个可能的解决方案是将xml分片发送,或者用字符数分隔,或者用标记分隔。虽然我们很容易将消息分成几个部分,但是发送这些部分并让客户机或服务器读取这些部分并将其编译为一个xml请求会给我们带来麻烦。
为了示例起见,我们希望测试让客户机在多个部分发送请求。
这是发送请求的客户端函数调用。xmlReq在别处生成并传入。作为一个将消息分为多个部分的示例,我们从xml请求中去掉结束标记,然后稍后将其作为另一个部分发送。
QString ClientConnection::sendRequest(QString xmlReq)
{
this->xmlRequest = xmlReq;
QHostAddress addr(address);
QList messagePieces;
xmlRequest.remove("");
messagePieces.append(xmlRequest);
messagePieces.append("");
client.connectToHost(addr,6789);
if(client.waitForConnected(30000))