В общем случае невозможно обнаружить и диагностировать разрыв сети со 100% точностью на Java или на любом другом языке. Действительно, даже не ясно, что представляет собой «поломка». Вот почему (например) ваш любимый веб-браузер выдает неопределенное сообщение об ошибке при вводе поддельного DNS-имени или IP-адреса в URL.
Проблема в том, что существует много ситуаций, когда невозможно узнать, что вызвало сбой сетевого взаимодействия:
- моя машина отключена?
- что-то болтает в моей локальной сети?
- отключена ли сеть моего провайдера из-за сбоя питания?
- является ли нестабильность интернет-маршрутизации причиной отправки моих пакетов в Туркмению?
- Гугл не работает ... или его преследует какой-то русский хакерский моб?
Многие из этих ситуаций трудно диагностировать. А пытаться диагностировать вещи из Java сложнее, потому что Java не предлагает стандартных API для таких вещей, как отправка ICMP-пакетов. По сути, вы ограничены попытками интерпретировать исключения Java, которые вы получаете, когда попытка подключения сокета не удалась.
IMO, вам лучше всего использовать существующие инструменты командной строки, такие как «ping» и «traceroute», и научиться читать чайные листья. Или, если это слишком сложно, оставьте экспертам диагностику сети.