2013-06-09 18 views
6

私はいつもインターネット接続が必要なJavaプロジェクトに取り組んでいます。Javaでインターネット接続をチェックする方法

インターネット接続が検出されなくなったらすぐに私のプログラムがインターネット接続をいくつかの時間間隔(たとえば5秒または10秒)でチェックし、メッセージを表示するようにします。

try 
{ 
    InetAddress add = InetAddress.getByName("www.google.com"); 
    if(add.isReachable(3000)) System.out.println("Yes"); 
    else System.out.println("No"); 
} 
catch (UnknownHostException e) 
{ 
    System.out.println("unkownhostexception"); 
} 
catch (IOException e) 
{ 
    System.out.println("IoException"); 
} 

しかし、このコードは常に「いいえ」を返します -

私は以下のコードがあり、この機能を実現するためにisReachableメソッドを使用しようとしました。このコードの問題は何ですか?

おかげ

+1

http://stackoverflow.com/questions/9922543/why-does-inetaddress-isreachable-return-false-when-i-can-ping:

これは、いくつかのサイトをテストしていきます-the-ip-address – uselpa

+0

ありがとうございますが、そこに提供されたソリューションは、私の場合は動作しません。著者はあまりにもちょうどハックがいくつかのケースでは動作しないかもしれないと言いました。 –

答えて

9

私はあなたはそれが常に稼働して到達可能な呼び出し元のサイトからとなりますを知っという意味で知られているいくつかの既知のホストにパケットを送信しているのを認識しています唯一の方法。

たとえば、名前付きホストを選択すると、DNSルックアップの失敗によりpingが失敗することがあります。

私はあなたがこの問題について心配するべきではないと思います:インターネット接続が必要なプログラムは、データを送受信するためです。接続は連続コンセプトではありません川のようですが、道路のようなものです。そのため、接続エラーを処理するためのJava標準を使用してください:IOExceptions。プログラムがデータを送信する必要がある場合、ネットワークがダウンしている場合、基礎となるAPIは認証されたIOEを投げ捨てます。プログラムがデータを期待している場合は、タイムアウトなどを使用してネットワークスタックのエラーを検出し、ユーザーに報告してください。

15

インターネットを頻繁に使用する必要がある場合は、Raffaeleの提案に同意します。それをやろうとすると、失敗したときに例外を処理する準備ができます。

何らかの理由でインターネットの可用性を監視する必要がある場合は、まだ使用する予定がなく、誰に接続するのかわからない場合でも、既知のサービスに接続してみてくださいサイト(google.com、amazon.com、baidu.com ...)。

public static void main(String[] args) { 
    System.out.println(
     "Online: " + 
     (testInet("myownsite.example.com") || testInet("google.com") || testInet("amazon.com")) 
    ); 
} 


public static boolean testInet(String site) { 
    Socket sock = new Socket(); 
    InetSocketAddress addr = new InetSocketAddress(site,80); 
    try { 
     sock.connect(addr,3000); 
     return true; 
    } catch (IOException e) { 
     return false; 
    } finally { 
     try {sock.close();} 
     catch (IOException e) {} 
    } 
} 
+1

はい、私は似たようなことをしています。どうもありがとう ! –

+0

これはうまくいきました、ありがとうございます。 testInet()メソッドはトリックを行うものです。 – russellhoff

関連する問題