Моя программа требует немедленного уведомления, если сетевое соединение
потерял.
Неудача. Вы не можете получить немедленное уведомление с TCP / IP. Он полон буферизации, повторных попыток и тайм-аутов, поэтому он не делает ничего сразу, а TCP по своему дизайну не имеет ничего, соответствующего «тональному сигналу вызова», или API. Единственный способ обнаружить потерянное соединение - попытаться выполнить ввод-вывод через него.
Я использую Java 5, поэтому я не могу использовать очень удобные функции
NetworkInterface.
Они вам тоже не помогут. Все, что они могут вам сказать, это то, работает ли NIC или нет, ничего о состоянии вашей связи с более широким миром.
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;
Это приведет к истечению времени ожидания сбоя DNS, если вы не в сети.
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
То же самое. Однако даже если это не так, socket.isConnected () всегда будет возвращать true. Такие API, как isConnected (), isBound (), isClosed (), сообщают только то, что вы сделали с сокетом . Они ничего не сообщают о состоянии соединение. Они не могут, по той причине, которую я привел выше.
И вы забыли закрыть сокет в случае исключения, поэтому у вас есть утечка ресурсов.
Мне нужен метод, который вернется немедленно.
Невозможно по указанным причинам. Вам нужно изменить дизайн, осознав, что эта функция не существует.