您好,登錄后才能下訂單哦!
使用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資源全力發送數據包(這個不是想要的,只能兩害取其輕了)。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。