使用QT中 QTcpSocket来检测设备的网络状态:
函数返回true,设备网络状态正常,返回false,设备网络异常。
bool TcpIpSocket::sendATcpSocketToIp(QString ip){
m_ipAdress = ip;
abort();
connectToHost(m_ipAdress, port);
//等待timeout时间,如果仍然不通,则异常
return waitForConnected(timeout);
}
要实现实时一直检测,使用while:
runWhile = true; runBreak = false;
bool retPing;
while(runWhile){
retPing = m_senderAgent.sendATcpSocketToIp(ipAdress);
if(retPing == true){
//ping 成功,目标ip网络正常,发送commandSuccessed
emit commandSuccessed();
}else{
//ping 失败,目标ip网络不正常,发送commandFailed
emit commandFailed();
}
sleep(1000); // sleep 1s
if(runBreak){
break;
}
}//end of while
运行中还存在问题的是,假如使用另外一个函数,在某个时刻触发,使runBreak = true ,或者 runWhile = false,但是这个while仍然一直循环执行,不会跳出,但是当注释掉sleep(1000)后,while就会跳出。但是注释掉sleep(1000)后,该while会占用大量cpu资源全力发送数据包(这个不是想要的,只能两害取其轻了)。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。