Как обнаружить разрыв сети с помощью Java-программы? - PullRequest
0 голосов
/ 15 января 2010

Есть ли способ обнаружить обрыв сети или более слабую сеть, используя Java?

Ответы [ 2 ]

1 голос
/ 15 января 2010

В общем случае невозможно обнаружить и диагностировать разрыв сети со 100% точностью на Java или на любом другом языке. Действительно, даже не ясно, что представляет собой «поломка». Вот почему (например) ваш любимый веб-браузер выдает неопределенное сообщение об ошибке при вводе поддельного DNS-имени или IP-адреса в URL.

Проблема в том, что существует много ситуаций, когда невозможно узнать, что вызвало сбой сетевого взаимодействия:

  • моя машина отключена?
  • что-то болтает в моей локальной сети?
  • отключена ли сеть моего провайдера из-за сбоя питания?
  • является ли нестабильность интернет-маршрутизации причиной отправки моих пакетов в Туркмению?
  • Гугл не работает ... или его преследует какой-то русский хакерский моб?

Многие из этих ситуаций трудно диагностировать. А пытаться диагностировать вещи из Java сложнее, потому что Java не предлагает стандартных API для таких вещей, как отправка ICMP-пакетов. По сути, вы ограничены попытками интерпретировать исключения Java, которые вы получаете, когда попытка подключения сокета не удалась.

IMO, вам лучше всего использовать существующие инструменты командной строки, такие как «ping» и «traceroute», и научиться читать чайные листья. Или, если это слишком сложно, оставьте экспертам диагностику сети.

1 голос
/ 15 января 2010

вы можете периодически проверять http-соединение с известным хостом, таким как Google, и обнаруживать ConnectionExceptions

URLConnection con = new URL("http://www.google.com/").openConnection();
con.setUseCaches(false);
con.setAllowUserInteraction(false);

while(true)
{
    try
    {
        con.connect();
        con.getContentType(); // just to make sure the connection works
        // sleep for some interval
    }
    catch(IOException e)
    {
        // handle and break
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...