在QT的学习网络的学习中,最大的问题是服务器与客户端收发数据的问题,当一方连续发送几次数据给另一方时,容易出现好几种错误:
1、收到的数据不全,只有第一个
2、收不到
3、收到的数据不对
readyRead在信号到达时,开始接收,我即使调用几次write,也不能解决这个问题。
我尝试了几个方法(发送的是结构体)
1、加延时,在write的时候,结果失败;
2、加入某博主说的,write后加waitFotBytesWritten,结果,在我发送十次数据的时候,得到的数据是跳动的,不连续的。
3、在每次发送前,加入一个头,指示有多少数据,读取的时候,readAll,会把所有的数据读到array,读取的数据的类型为QByte
Array,是二进制,这时候需要把array分解出来,char* buff = array.data(); buff指向array的第一个字节,int num;然后memcpy(&num,buff,sizeof(int));把头分解出来,buff+=sizeof(int),buff此时指向第一个发送的数据,这样就可以解决了。
隐患:目前只针对小数据,大数据还没有测试,因为不确定readyRead一次能读取多大的数据。
自己研究的,如有不对,请告之,谢谢