2

QNetworkAccessManager を使用して HTTP リクエストを実行しています。使用しているネットワーク接続が時々オフラインになることがあることがわかったので、リンクがいつダウンしたかを積極的に検出したいと考えています。

スロットを QNetworkAccessManager::networkAccessibleChanged() シグナルに接続しましたが、スロットからの出力が見られません。

解決策を探す中で、私が答えに最も近いのは次の議論です: http://www.qtcentre.org/threads/37514-use-of-QNetworkAccessManager-networkAccessible

ただし、提案された解決策は私の問題を解決しませんでした。

私が間違っているかもしれないことについて何か提案はありますか?

4

1 に答える 1

3

わかりました、さらに実験した後、私は答えを見つけました...

私の問題は、システムに複数のイーサネット インターフェイスがあることです。

私の質問からリンクされたディスカッションでは、次のコードを追加することが提案されました。

QNetworkAccessManager* mNetworkAccessManager = new QNetworkAccessManager();
QNetworkConfigurationManager manager;
mNetworkAccessManager->setConfiguration(manager.defaultConfiguration());

QNetworkAccessManager::setConfiguration() のドキュメントは、デフォルトの構成が自動的に使用されることを示しています。これは不要ですが、正しい軌道に乗っています。

私の問題は、デフォルトの構成が、接続が通過しているインターフェースとは異なるインターフェースに接続されていることです。だから私は次のことをしました:

QString ifName = "eth2";
QNetworkAccessManager* pNetworkAccessManager = new QNetworkAccessManager();
QNetworkConfigurationManager manager;
foreach(QNetworkConfiguration cfg, manager.allConfigurations()) {
  if (cfg.name() == ifName) {
    pNetworkAccessManager->setConfiguration(cfg);
    break;
  }
}

今、私のスロットが呼び出されます。

目的の構成を取得する簡単な方法があればいいのにと思います。ここで、インターフェイス名ではなく、IP アドレスから始まる構成を取得する方法を理解する必要があります。

于 2013-08-21T19:29:39.267 に答える