如何使用QProcess通过Ping检测“网络无法访问”?

时间:2012-12-06 07:08:46

标签: c++ c linux qt

使用QProcess ping目标/本地IP时遇到问题。当ping为Successfull时,QProcess返回“0”,而当ping给出“Network is Unreachable”错误时(在终端上手动查看),QProcess返回。

实际上我需要检查应用程序中的网络连接。为了实现它,我使用了一个非常简单的使用QProcess的ping概念。如果有任何网络错误,我需要弹出一个消息框,否则应用程序正常启动而没有任何弹出消息。

这是我的ping代码:

   bool App::pingPcuStatus(void)
   {
     const QString IP ="192.168.49.44";
     bool ret = false;
     int status;

     if ( IP == "0.0.0.0") {
        status = 1;
     }
    else {
            QProcess pingProcess;
            QString exec = "ping";
            QStringList params;
            params << "-c" << "1" << IP;
            status = pingProcess.execute(exec, params); //status = 0 , if Ping Successfull
            pingProcess.close();
     }

    ret = (status) ? false : true;
    return ret;
    }

但是在我发现调试时,它返回“true”,即使我没有连接到网络。 (我尝试在终端上使用相同的命令手动ping,它给出了“网络无法访问”错误)。

这导致了我的案件中的一个大错误。

使用QProcess或任何其他方法解决此错误的最佳方法是什么?

欢迎任何想法或建议。

1 个答案:

答案 0 :(得分:1)

来自https://stackoverflow.com/a/2148360/793796的原始答案:

QProcess pingProcess;
QString exec = "ping";
QStringList params;
params << "-c" << "1" << IP;
pingProcess.start(exec,params,QIODevice::ReadOnly);
pingProcess.waitForFinished(-1);

QString p_stdout = pingProcess.readAllStandardOutput();
QString p_stderr = pingProcess.readAllStandardError();

然后你可以解析stdout&amp;标准错误,