使用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資源全力發送數據包(這個不是想要的,只能兩害取其輕了)。