• 4221阅读
  • 1回复

[提问]tcpsocket readyread 的信号问题 [复制链接]

上一主题 下一主题
离线houtinghua
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-20
connect(client,SIGNAL(readyRead()),this,SLOT(slot_readyread()),Qt::DirectConnection);
通常而言如果有数据来了信号就会通知我去读,这是我正常情况下发送的数据,前四个字节告诉客户端我此次发送了多少字节的数据
|---0x4----||-----4字节的数据-----|

但是假如我那天写代码有了bug,发送了如下数据
|---0x4----||-----6字节的数据-----|
如果服务器端计算失误,少算了2个字节,但是我实际发送了6个字节,并且我客户端也只是读取了4字节的数据,也就是说还剩2字节在缓存中


这个时候如果再次触发了readyRead信号,那么剩下的2字节是被丢弃了,还是我会先读取了这2字节的无效数据?
离线houtinghua

只看该作者 1楼 发表于: 2014-05-20
我的解决方法是不信任原则
1 采用标记位找到包头的四字节,防止前面有剩余的数据

2不论服务端告诉我的长度是多少,如果告诉我多了, 我就会一直读,然后超时,如果告诉我少了,就会把剩余数据当成下一个包的包头,也是错误,这两个方向我都会把连接断掉,
快速回复
限100 字节
 
上一个 下一个