Qt客户端连java服务端 Qt端组包和解包的问题~

fq15973135977 2013-04-10 10:17:41
Qt与Java进行tcp socket通信,但字节流解析出现了问题,比如:传一个 “4字节(int)+2字节(short_表示后面数据的长度)+QString+2字节(short_表示后面数据的长度)+QString” 的数据应该怎么组包,反之同样的数据从Java服务端传来怎么解包?
用QDataStream+QByteArray,但Java那边总会莫名其妙的在某些位置多几个字节的数据,用QByteArray,Java 那边更乱七八糟的,真心求助,Qt端应该怎么弄?先谢谢各位了!!~
...全文
327 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ganggood 2013-04-26
  • 打赏
  • 举报
回复
将报文转换为Utf8试试
fq15973135977 2013-04-11
  • 打赏
  • 举报
回复
怎么都没有人,项起~
fq15973135977 2013-04-11
  • 打赏
  • 举报
回复
怎么没有人,必须顶起啊
fq15973135977 2013-04-11
  • 打赏
  • 举报
回复
能不能说得具体一点~
fq15973135977 2013-04-11
  • 打赏
  • 举报
回复
中文发送后,解出来是乱码?有什么方法解决没?
乔巴好萌 2013-04-11
  • 打赏
  • 举报
回复
“4字节(int)+2字节(short_表示后面数据的长度)+QString+2字节(short_表示后面数据的长度)+QString” 的数据应该怎么组包,反之同样的数据从Java服务端传来怎么解包? TCP是一个流式的结构,所以中间要自己在应用层上分包,你这里采用2字节标识长度,很好,这样可以标识的长度大小是256*256 = 64K,但是发送的时候,tcp不会知道你传递是QString或String或const char*或unsigned char*,在网络上传输的时候,只有二进制的数据,也就是unsigned char 所以你传输的时候,要先把QString转码成unsigned char*后再发送,这里也要注意QString的编码格式,如Utf-8或GBK或ASCII编码都导致最终的unsigned char*是不同的. 发送的时候,先接受4个字节,然后阻塞的收2个字节,计算出对应的长度,然后阻塞的将对应长度的数据收完,(也就是你定义的QString),收完后还原成对应的QString
乔巴好萌 2013-04-10
  • 打赏
  • 举报
回复
QString就不是POD数据 这样的数据 中间混杂着 对象的内存布局 你发送的时候 要发送unsigned char 这样的数据 也就是说 发送的时候 无关什么数据类型 全都是unsigend char数据

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧