Java Быстрая проверка сетевого подключения

Моя проблема довольно проста. Моя программа требует немедленного уведомления, если сетевое соединение потеряно. Я использую Java 5, поэтому я не могу использовать очень удобные функции NetworkInterface .

В настоящее время у меня есть два разных метода проверки сетевого подключения:
(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. Мне нужен метод, который вернется немедленно, но совместим с Java 5.

Спасибо!

EDIT: Я забыл упомянуть, что моя программа зависит от IP-адресов, а не DNS-имен. Таким образом, проверка ошибки при разрешении хоста отсутствует ...

2-е РЕДАКТИРОВАНИЕ:

Выяснили окончательное решение, используя NetworkInterface :

Enumeration eni = NetworkInterface.getNetworkInterfaces();
        while(eni.hasMoreElements()) {
            Enumeration 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;
                }
            }
        }

11
задан BenCole 10 August 2011 в 13:02
поделиться