重複の可能性:
インターネット接続がJavaに存在するかどうかを確認する方法は?
Javaを使用しているときにインターネット接続があるかどうかを簡単に検出する方法があるかどうかを知りたいです。現在のアプリは Windows 用の WinInit DLL で "InternetGetConnectedState" メソッドを使用していましたが、私のアプリは Mac 操作用のクロスプラットフォームである必要があり、この方法では機能しません。Java で DLL を使用する JNI もまったく知らず、高速でイライラするようになりました。
私が考えることができる唯一の方法は、Web サイトへの URL 接続を開こうとし、それが失敗した場合は false を返すことでした。私の他の方法は以下ですが、これが一般的に安定しているかどうかはわかりませんでした。ネットワーク ケーブルを抜くと、InetAddress を作成しようとすると UnknownHostException が発生します。それ以外の場合、ケーブルが接続されている場合は、有効な InetAddress オブジェクトを取得します。以下のコードを Mac でまだテストしていません。
あなたが提供できる例やアドバイスをありがとう。
更新: 最終的なコード ブロックは一番下にあります。HTTP リクエスト (この場合は Google) のアドバイスに従うことにしました。シンプルで、返されるデータのサイトにリクエストを送信します。接続からコンテンツを取得できない場合、インターネットはありません。
public static boolean isInternetReachable()
{
try {
InetAddress address = InetAddress.getByName("java.sun.com");
if(address == null)
{
return false;
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
最終的なコード ブロック:
//checks for connection to the internet through dummy request
public static boolean isInternetReachable()
{
try {
//make a URL to a known source
URL url = new URL("http://www.google.com");
//open a connection to that source
HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();
//trying to retrieve data from the source. If there
//is no connection, this line will fail
Object objData = urlConnect.getContent();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}