首页| 论坛| 消息

标题:socket协议访问设备
作者:chenmin_oer
日期:2023-01-19 16:11
内容:

设备是网口的,通过socket协议访问。但有个问题,我需要实时(比如1s访问一次,不间断访问24h)read,但N次中会偶尔出现几次 socket的waitForReadyRead函数错误。设备厂家反馈 tcpip访问就是这样,是其特性。
我现在的措施是,当waitForReadyRead函数返回false时,用自定义的字符串代替read的内容。是否有更好的方法? 另外,厂家的解释是合理的吗?


#1 [liulin188 01-20 00:38]
waitForReadyRead在windows是有这个问题,官方文档已经给出了解决的办法。
不过我个人使用中这种概率不高,如果失败,直接重复请求一次就行。
#2 [wwwfffhhh 01-20 17:18]
建议改为信号接收读取,而不是这种线程 死 等待
#3 [wwwfffhhh 01-20 17:18]
connect(this, &QTcpSocket::readyRead, this, &CTcpConnectSocket_Client::onReadyRead);
#4 [wwwfffhhh 01-20 17:19]
然后在槽函数中执行循环读取到空while(true)
{
qint64 count = read((char*)InnerBufferForReceiveEvent.GetDataAddress(), InnerBufferForReceiveEvent.GetAllocMemLen());
if(count > 0)
{
ReceivePacketBuffer.AddBytes(InnerBufferForReceiveEvent.GetDataAddress(), count);
}
else
{
break;
}
}

回复 发表
主题 版块