Ответ 1
InetAddress.getByName(ip).isReachable(timeout);
Я хочу проверить, доступна ли удаленная система с помощью Java или другими словами "отправить пинг" с помощью Java. Эта функциональность должна быть инкапсулирована в метод с логическим значением, например
public boolean isReachable(String ip) {
// what to do :-)
}
Я тестировал класс Java Process, но я не думаю, что это лучший способ сделать это из-за сложной обработки вывода с помощью OutputBuffers.
Process proc = Runtime.getRuntime().exec("ping " + ip);
Другой возможностью было бы создание соединения Socket и обработки исключенных исключений, но если удаленная система является "голой" системой unix, на другой стороне может отсутствовать Socket:-) Кроме того, я хотел бы иметь возможность для установки таймаута, когда удаленная система недоступна.
Итак, как я мог это сделать? Спасибо!
InetAddress.getByName(ip).isReachable(timeout);
InetAddress.getByName(host).isReachable(timeOut)
(см. здесь)
Похоже, вы используете Linux, поэтому вы, вероятно, обнаружите, что isReachable() ненадежна (потому что у вас не будет разрешений на отправку ICMP-пакетов, а очень мало серверов работает с Echo-сервисом).
Если это так, я думаю, вам нужно будет использовать spawn Process так, как вы предлагаете, но я рекомендую использовать команду, например:
ping -c 1 hostname
Это прекратится после одной попытки, и вы сможете проверить состояние выхода процесса - гораздо надежнее, чем разбор стандартного вывода.
Ping возвращает 0 для успеха, отличного от нуля при неудаче.
Я знаю, что этот вопрос нашел свой ответ, но я хотел бы добавить свой код только для "copy-paste".
public boolean isIpReachable(String ip, int timeout){
boolean state = false;
try {
state = InetAddress.getByName(ip).isReachable(timeout);
} catch (IOException e) {
//Parse error here
}
return state;
}