javaでネットワーク接続が利用可能かどうかを調べるにはどうすればよいですか? ネットワーク接続に関する情報を取得したい。利用可能な場合は、ネットワークに接続してデータを取得します。それ以外の場合は、ローカル データベースを使用します。
解決策はありますか?
javaでネットワーク接続が利用可能かどうかを調べるにはどうすればよいですか? ネットワーク接続に関する情報を取得したい。利用可能な場合は、ネットワークに接続してデータを取得します。それ以外の場合は、ローカル データベースを使用します。
解決策はありますか?
Try to connect the network, as you said. If fails, repeat e.g. 3 times. If still failling, use local database. You don't have to additionally ping anything.
For simplicity you can use Jodd HTTP library, for example:
try {
HttpRequest.get("http://stackoverflow.com").send();
return true;
} catch (Exception ex) {
return false;
}
@igorのように、 「あなたが言ったように、ネットワークに接続してみてください。失敗した場合は、たとえば3回繰り返します。それでも失敗した場合は、ローカルデータベースを使用します。追加でpingを実行する必要はありません。」
例えば:
public class InternetConnection {
/* use at least one reliable host, in most cases you will want
to use the one you're working with later */
private static final String CHECK_URL = "http://www.t-online.de/";
public static InternetConnectionState isAvailable() {
try {
URL url = new URL(InternetConnection.CHECK_URL);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
Object objData = urlConnection.getContent();
} catch(UnknownHostException exception) {
return new InternetConnectionState(false);
} catch(IOException exception) {
return new InternetConnectionState(false);
}
return new InternetConnectionState(true);
}
}
ホストに ping を実行できます。見る
データベースにアクセスできるかどうかを確認する場合は、接続の試行中に発生する可能性のある接続例外をキャッチできます。その後、失敗した場合はローカルデータベースを使用できます
そのためにjava.net.NetworkInterfaceを使用できます。これを行う方法の簡単な例を次に示します。
public boolean isConnectedToNetwork() {
Enumeration<NetworkInterface> interfaceEnumeration = NetworkInterface.getNetworkInterfaces();
while (interfaceEnumeration.hasMoreElements()) {
NetworkInterface each = interfaceEnumeration.nextElement();
if (!each.isLoopback() && each.isUp()) {
return true;
}
}
return false;
}
ループバック インターフェイスでないかどうかを確認する必要があることに注意してください。