0

QProcess を使用して宛先 / ローカル IP に ping を実行中に問題が発生しました。ping が成功した場合、QProcess は「0」を返しますが、ping が「ネットワークに到達できません」というエラーが発生した場合も (ターミナルで手動で表示されます)。

実際には、アプリケーションでネットワーク接続を確認する必要があります。それを実装するために、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またはその他の解決方法を使用してこのエラーをキャプチャする最良の方法は何ですか???

どんなアイデアや提案も大歓迎です。

4

1 に答える 1

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 と stderr を解析できます。

于 2012-12-06T07:19:56.823 に答える