5

Windows で C++ ネットワーク アプリケーションを開発しています。インターネット接続があるかどうかを確認する必要があります。gethostbyname() を使用していますが、システムがプロキシ経由で接続されている場合、誤った情報が返されます。InternetCheckConnection() と InternetGetConnectedState() も、さまざまな条件下で信頼できる結果が得られません。プロキシや VPN などのすべての条件をカバーするインターネット接続を確認する信頼できる方法はありますか?

アップデート:

当社のネットワークでは、WinHttpGetProxyForUrl() がエラー ERROR_WINHTTP_AUTODETECTION_FAILED で失敗し、WinHttpSendrequest() がエラー ERROR_WINHTTP_NAME_NOT_RESOLVED で失敗しています。

オープン ネットワークでは、WinHttpSendrequest() が成功します。

4

4 に答える 4

4

リソースの可用性をテストする最善の方法は、実際に使用してみることです。接続したいものがある場合にのみ、インターネットに関心があります。したがって、プログラムの通常の過程でそれに接続して、エラーを処理してみてください。試してみるとどうなるかを推測しようとしないでください。まず、未来を予測しようとしています。第二に、実際の接続が実行するのと同じことを実行するとは限りません。第 3 に、テストが成功しても、介在する条件の変更により、その後の使用が失敗する可能性があります。第 4 に、とにかくリソースの実際の使用によるエラーを処理する必要があります。なぜ、すべてのコードを 2 回記述する必要があるのでしょうか。

于 2012-08-01T05:31:27.913 に答える
0

簡単な解決策は、既知のホストへの接続を試みることです。成功すれば、接続が確立されます。

于 2012-08-01T05:26:09.417 に答える
0

私の意見では、ソケットを作成し、既知のホストに接続してみることです。次のリンクが役に立ちます: Windows の場合: http://msdn.microsoft.com/en-us/library/ms740673(VS.85).aspxおよび UNIX の場合http://www.tenouk.com/cnlinuxsockettutorials.html

HTH
アニル

于 2012-08-01T05:30:48.970 に答える