QT 使用 QTcpSocket来检测 ip 设备的网络状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 使用 QTcpSocket来检测 ip 设备的网络状态相关的知识,希望对你有一定的参考价值。
使用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资源全力发送数据包(这个不是想要的,只能两害取其轻了)。
本文出自 “太阳真圆” 博客,请务必保留此出处http://xuedengfeng.blog.51cto.com/7132939/1870947
以上是关于QT 使用 QTcpSocket来检测 ip 设备的网络状态的主要内容,如果未能解决你的问题,请参考以下文章
Qt:当用户关闭它时,在控制台应用程序中检测到 QTcpSocket 断开连接
Qt基础之三十四:QTcpSocket和QTcpServer源码分析