QTcpSocket write()方法访问内存越界

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"

两次执行的结果不太一样!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值