Qt检测网络是否畅通

Qt检测网络是否畅通

ping 命令

实现原理: 使用QProcess执行一条ping命令,并读取执行的结果。再检测结果中有没有 TTL= 这个字符串,如果有这个字符串表示连接成功。


网络检测头文件 .h

class NetworkDetect : public QThread
{
    Q_OBJECT
public:
    NetworkDetect();

    virtual void run();
    void stop();
signals:
    void sig_netStatusChanged(bool state);

private:
    bool flagRunning;   //线程运行标志
    QProcess *network_process;

};

网络探测 .cpp

NetworkDetect::NetworkDetect()
{
    flagRunning = true;
}


void NetworkDetect::run()
{
    QString network_cmd = "ping www.baidu.com -w 500 -n 2";
    QString result;
    network_process = new QProcess();    //不要加this
    while(flagRunning)
    {
        network_process->start(network_cmd);   //调用ping 指令
        network_process->waitForFinished();    //等待指令执行完毕
        result = network_process->readAll();   //获取指令执行结果
        //qDebug() << result;
        if(result.contains(QString("TTL=")) || result.contains(QString("ttl=")))   //若包含TTL=字符串则认为网络在线
        {
            emit sig_netStatusChanged(true);  //在线
        }
        else
        {
            emit sig_netStatusChanged(false); //离线
        }
        sleep(1);  //加sleep降低CPU占用率
    }
}

void NetworkDetect::stop()
{
    flagRunning = false;
}


使用QNetworkAccessManager / post

https://blog.csdn.net/u011942101/article/details/115595578

posted @ 2022-04-22 14:33  看不见的R  阅读(1875)  评论(0)    收藏  举报