qt服务器读取客户端消息,使用Qt通过TCP套接字部分发送xml消息

在QT项目中,客户端通过TCP套接字发送XML请求到服务器,遇到大消息被截断的问题。问题仅在客户端和服务器跨机器通过局域网通信时出现。为了解决此问题,考虑将XML消息分片发送。客户端已实现分片发送,但服务器端需要改进以接收并重新组合这些片段。目前服务器仅读取首个分片,导致无法处理完整请求。需要调整服务器代码以处理来自客户端的多个写入操作,并重新组装XML。
摘要由CSDN通过智能技术生成

我们正在编写一个项目,其中有一个客户机生成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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值