QTcpSocket write()方法访问内存越界
最近在使用QT做无线系统的TCP通信相关内容。
由于需要和其他厂家的系统进行对接,需要定时发送心跳包给其他厂家。
定的接口中,心跳包就一个字节数据,ascii码’0x00’。
再使用下述代码时,发现服务端一直接收不到
char t = 0x00;
qint64 iRlt = m_pxClient->write(&t);
m_pxClient->flush();
write()的返回值是0,说明数据没有发送成功。
不知道是不是write()中传的数据有问题,导致的发送不成功,于是将char t = 0x00;修改成char t = 0x48;此时发现iRlt 的值有时是8,有时是10。发送成功了。
但iRlt的值不应该是1吗?返回8或10,这个是不是访问越界了呢?
将服务端接收到的数据打出来,显示的是:
“480c9ce56b9818160103”
这是将接收到的数据转成16进制显示,开始的“48”是客户端发送的数据,这明显是write的时候,内存访问越界了。
将上述代码修改成下面这样,在write()时指定一个明显越界的size:
char t = 0x48;
qint64 iRlt = m_pxClient->write(&t, 20);
m_pxClient->flush();
执行也没有问题:
"480c9ce56b981819010300000000051901ffffff"
"480c9ce56b98181901030000000005190100c119"
两次执行的结果不太一样!