查看完整版本: [-- socket协议访问设备 --]

QTCN开发网 -> Qt基础编程 -> socket协议访问设备 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

chenmin_oer 2023-01-19 16:11

socket协议访问设备

设备是网口的,通过socket协议访问。但有个问题,我需要实时(比如1s访问一次,不间断访问24h)read,但N次中会偶尔出现几次 socket的waitForReadyRead函数错误。设备厂家反馈 tcpip访问就是这样,是其特性。

我现在的措施是,当waitForReadyRead函数返回false时,用自定义的字符串代替read的内容。是否有更好的方法? 另外,厂家的解释是合理的吗?

liulin188 2023-01-20 00:38
waitForReadyRead在windows是有这个问题,官方文档已经给出了解决的办法。
不过我个人使用中这种概率不高,如果失败,直接重复请求一次就行。

wwwfffhhh 2023-01-20 17:18
建议改为信号接收读取,而不是这种线程 死 等待



wwwfffhhh 2023-01-20 17:18
    connect(this, &QTcpSocket::readyRead, this, &CTcpConnectSocket_Client::onReadyRead);

wwwfffhhh 2023-01-20 17:19
然后在槽函数中执行循环读取到空    while(true)
    {
        qint64 count = read((char*)InnerBufferForReceiveEvent.GetDataAddress(), InnerBufferForReceiveEvent.GetAllocMemLen());
        if(count > 0)
        {
            ReceivePacketBuffer.AddBytes(InnerBufferForReceiveEvent.GetDataAddress(), count);
        }
        else
        {
            break;
        }
    }




查看完整版本: [-- socket协议访问设备 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled