私の問題はかなり簡単です。私のプログラムでは、ネットワーク接続が失われた場合にすぐに通知する必要があります。私はJava5を使用しているので、NetworkInterfaceの非常に便利な機能を使用できません。
現在、ネットワーク接続をチェックする2つの異なる方法があります:
(try..catchesが削除されました)
方法1:
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
// trying to retrieve data from the source. If offline, this line will fail:
Object objData = urlConnect.getContent();
return true;
方法2:
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
ただし、これらのメソッドは両方とも、falseを返す前にタイムアウトに達するまでブロックします。すぐに戻るメソッドが必要ですが、Java5と互換性があります。
ありがとう!
編集:私のプログラムがDNS名ではなくIPアドレスに依存していることを言及するのを忘れました。したがって、ホストを解決するときにエラーをチェックすることはできません...
2番目の編集:
NetworkInterfaceを使用して最終的な解決策を見つけました:
Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
while(eni.hasMoreElements()) {
Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
while(eia.hasMoreElements()) {
InetAddress ia = eia.nextElement();
if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() && !ia.isSiteLocalAddress()) {
if (!ia.getHostName().equals(ia.getHostAddress()))
return true;
}
}
}