• QT ——TCP接收到的数据出现乱码情况


    这个项目是写一个利用TCP来传输.bin的并文件,接收端是将接收到的.bin并文件直接在串口助手中进行读取。

     

    但是从读取的结果来看发现传输过来得数据是错误的,与原数据不相符,由于服务端是直接对并文件在串口助手中显示,一开始认为直接读取的数据可能先把一些包的文件说明读了读了出来,导致文件里面的正确数据没有正常的读取出来。

     

    后来发现并不是传输一开始有问题,而是在接受过程中是有问题的。

     

    这里就发现了QT的TCP传输机制,它将我的数据分两次接收,每一次是原来的一半。

     

    例如我传3000字节大小,那么它会拆成两次1500,偶尔会出现2966和44或者一次满包的情况。

     

    随着你传输数据越大,能一次性满包的概率越小。

     

    我在项目里用的是readAll函数,并没有找到QT函数中能阻塞式接收指定数据大小的函数。

     

    当然了数据过大会分包,数据过小的频繁传输会粘包。

     

    又或者因为两次传输的时间分隔比较小,所以导致redyread只触发一次的问题都有可能遇到。

     

    关于上述分包的解决办法是因为我知道数据包一次传输的大小。

     

    所以再readAll后立即判断buff. size()的大小是否大于一次传输的大小 即>=3000

     

    不是的话吧buff赋值给全局变量   第二次出发radyread信号 再通过append来拼接两个或者三个包。

  • 相关阅读:
    【LeetCode】- Valid Palindrome(右回文)
    高榕资本宾悦:未使用的企业家Testin云测试服务类故障
    2015第17周三专注
    2015第17周二
    2015第17周一
    2015第16周日
    2015第16周六学习java建议
    2015第16周五
    2015第16周四自控力
    2015第16周三知道做到
  • 原文地址:https://www.cnblogs.com/lisongzzx/p/13720788.html
Copyright © 2020-2023  润新知