Delphi XE2 で、コンピュータが次のことを実行できるかどうかを検出する最も信頼できる方法は何ですか?
- 固定 IP アドレスを持たない HTTP で特定の Web サイトにアクセスする
- ローカルまたはリモートの電子メール クライアントで電子メールを送受信する
Delphi XE2 で、コンピュータが次のことを実行できるかどうかを検出する最も信頼できる方法は何ですか?
関連する要素が多すぎます (インターネット接続の種類、ファイアウォール/ルーターのルール、プロキシなど)。最も信頼できるアプローチは、単に現在の状態を判断しようとせず、必要な操作 (実際の HTTP 要求、または SMTP/POP3/IMAP 操作などを実行する) を試み、エラーに対応する準備をすることです。接続関連のエラーを検出し、再試行する前にインターネット接続を確認するようユーザーに促すことができます。
を使用TIdHTTP.Get
してダウンロードしてみてくださいhttp://google.com
。
もちろん、インターネットに接続されているという定義にもよります。他のポートが開いている間に Web トラフィック (ポート 80) がブロックされることがあります。幸いなことに、今日ではほとんどの人が実際に Web を閲覧することを許可されています。Web は日常の活動にも役立つからです。Google はおそらく、ファイアウォールの影響が最も少ない Web サイトの 1 つであり、アップタイムが最も長い Web サイトの 1 つです。
それでも、それは幸運な推測です。必要に応じて、自分のことを試してみて、それが機能するかどうかを確認することもできます. そうでない場合は、Google にアクセスできたとしても、コンピュータが正しく接続されていないようです。:)
[編集]
議論のため。InternetCheckConnection
も良い代替手段ですが、実際のサーバーに ping を実行して接続をチェックします。
MSDNによると
InternetCheckConnection関数を使用して、インターネットへの接続を確認します。関数に渡された URL で指定されたサーバーに対して ping を試行します。FLAG_ICC_FORCE_CONNECTION フラグが設定されていて、URL が NULL の場合、関数はサーバー データベースに最も近いサーバーのエントリがあるかどうかを確認します。存在する場合、関数はそのサーバーに ping を送信します。
ただし、この関数は ping を使用するため、実際にコンテンツを取得するよりも少し高速になる場合があります。一方、多くのファイアウォールは積極的に ping を拒否します。