Как проверить, доступна ли удаленная система - PullRequest
21 голосов
/ 07 октября 2011

Я хочу проверить, достижима ли удаленная система с помощью Java или, другими словами, «отправить пинг» с помощью Java. Эта функциональность должна быть заключена в метод с логическим значением, например

public boolean isReachable(String ip) {
   // what to do :-)
}

Я протестировал класс Java Process, но я не думаю, что это лучший способ сделать это из-за сложной обработки вывода с помощью OutputBuffers.

Process proc = Runtime.getRuntime().exec("ping " + ip);

Другой возможностью было бы создание Socket Connection и обработка брошенных исключений, но если удаленная система является «голой» системой Unix, возможно, на другой стороне не было бы Socket :-) Кроме того, я хотел бы иметь возможность установить время ожидания, когда удаленная система недоступна.

Так как я мог это сделать? Спасибо!

Ответы [ 4 ]

42 голосов
/ 07 октября 2011
InetAddress.getByName(ip).isReachable(timeout);
9 голосов
/ 07 октября 2011

InetAddress.getByName(host).isReachable(timeOut) (видно здесь )

4 голосов
/ 07 октября 2011

Похоже, что вы используете Linux, поэтому вы, вероятно, обнаружите, что isReachable () ненадежен (потому что у вас не будет разрешений на отправку пакетов ICMP, а на очень немногих серверах запущена служба Echo).

Если это так, то я думаю, вам потребуется использовать метод порождения процессов, как вы предлагаете, но я рекомендую использовать такую ​​команду:

   ping -c 1 hostname

Это завершится после одной попытки, и затем вы сможете проверить состояние завершения процесса - гораздо более надежный, чем анализ стандартных выходных данных.

Ping возвращает 0 для успеха, отличного от нуля при ошибке.

1 голос
/ 20 ноября 2017

Я знаю, что этот вопрос нашел ответ, но я хотел бы добавить свой код только для «копирования-вставки».

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...