2012-04-01 7 views
2

wiFiが無効の間にIPアドレス(例:http://222.222.222.222:8080)とURL(例:http://www.website.com)に接続しようとしました。私はwiFiがなく、IPアドレスに接続しようとすると、私にConnectExceptionというエラーが表示されることに気付きました。一方、wiFiがなくURLに接続しようとすると、IOExceptionというエラーが表示されます。唯一の違いは、最初のIPアドレスともう1つのURLのIPアドレスを指定した場合、なぜ2つの異なるExceptionが受信されるのですか?誰かが私にこれを啓発することはできますか?私はこれを明確にするよう求めています。wiFiが無効の場合、ConnectException対IOException?

ありがとうございました!

+0

HttpUrlConnection、HttpClient、または別のクラスを使用してURLに接続していますか? – louielouie

答えて

2

異なる手順が失敗するため、さまざまなエラーが発生しています。

IPアドレスの80ポートに接続しようとすると、失敗したのはconnect(2)システムコールです。 connect(2)が失敗する理由はさまざまです。例外からメッセージを検査して、ユーザーに良いエラーメッセージを提供する必要があります。あなたがテキストのアドレスのポート80に接続しようとしているときに

は、ライブラリが最初getaddrinfo(3)を使用してIPアドレスに決意ホスト名にしようとします。名前解決は、ネットワークアクセスに基づいて失敗する場合もあれば、失敗しない場合もあります。たとえば、localhostに接続しようとする場合、ネームサービスの検索はローカルデバイス上で完全に処理できるため、通常はネットワークアクセスは必要ありません。ネームサーバーに接続できないためにネームサービスの障害が発生するため、原因となるの原因が特定のテストで同じであっても、別のエラーメッセージ(および例外)を与えるのは理にかなっています。さまざまな理由でネームサーバーにアクセスできない場合があります。この場合も、例外からのメッセージを調べて、ユーザーに適切なエラーメッセージを出す必要があります。

+0

あなたの答えをありがとう!あなたの説明が正しく理解されていれば、AndroidはIPアドレスとテキストアドレスへの接続手順が異なりますか? 2には異なるステップがあるため、エラーメッセージは異なる方法で処理されますか?テキストアドレスに接続しようとすると、IPアドレスを解決するためにネームサーバーに接続する必要があります。ネームサーバーからIPアドレスを取得できなかった場合は、別のエラーメッセージが返されます。 ConnectExceptionは、すでにIPアドレスを試していても接続を確立できない場合にのみ返されます。 – Arci

+0

Androidに固有のものではありません。 TCP/IPファミリのプロトコルをサポートするすべてのデバイスとプラットフォームで共通です。エラーメッセージの詳細はプラットフォームごとに変わりますが、一般的に_protocol_レベルのエラーは非常に簡単に得られます。「モデムが接続されていません」や「ネットワークケーブル「後方にある」または「WiFiルータがダウンしています」ということは非常に困難です。 – sarnold

+0

私は今それを得る。解明してくれてありがとう! :D – Arci