c++ - 如何使用 QProcess 通过 Ping 检测 "Network is Unreachable"?

标签 c++ c linux qt

我在使用 QProcess ping 目标/本地 IP 时遇到问题。当 ping 成功时,QProcess 返回“0”,而当 ping 给出“网络无法访问”错误时(在终端上手动查看)。

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

这是我的 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 或任何其他方式解决此错误的最佳方法是什么???

欢迎任何想法或建议。

最佳答案

原始答案来自 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 & stderr了。

关于c++ - 如何使用 QProcess 通过 Ping 检测 "Network is Unreachable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738620/

相关文章:

c - 数字以U结尾是什么意思

c - 为什么在一个序列点内最多只能有一个具有 volatile 限定类型的读取访问?

php - CentOS:在 shell 文件中找不到命令

linux - 使用 ssh 启动远程进程并退出

c - 在创建 RAW_SOCKET 错误时,如不允许操作

c++ - 为什么在 C++ 中构造函数被调用两次?

c++ - 游戏实体类型分配

c++ - 如何将方法的引用作为参数传递

sql-server - 如何在linux上打开和编辑mdf sql server数据库文件

c++ - 显式默认构造函数