#java
#java
Вопрос:
Я использую correto java 11 JDK
Вот мой метод:
public static boolean sendPingRequest(String host)
{
boolean value = false;
try
{
InetAddress myip = InetAddress.getByName(host);
System.out.println("Sending Ping Request to " myip);
if (myip.isReachable(5000))
{
System.out.println("Host: " host " is reachable");
value = true;
}
else
{
System.out.println("Host: " host " is unreachable");
}
}
catch (UnknownHostException e)
{
System.out.println("I can't reach this host: " e.getMessage());
e.printStackTrace();
}
catch (IOException e)
{
System.out.println("IO Exception" e.getMessage());
}
return value;
}
Когда я могу использовать метод здесь, он терпит неудачу
String myHost = "www.google.com";
sendPingRequest(myHost);
Отправка запроса Ping на www.google.com/108.177.111.106
Хост: www.google.com является недостижимым
Процесс завершен с кодом выхода 0
Из чтения документации похоже, что метод InetAddress.getByName возвращает это, но он будет терпеть неудачу каждый раз, если я не смогу заставить его показать, что хост имеет IP 108.177.111.106.
Ответ №1:
Я не могу воспроизвести вашу проблему. Вот что я пробовал:
public class Main {
public static void main(String[] args) {
System.out.println(sendPingRequest("www.google.com"));
System.out.println(sendPingRequest("74.125.195.106"));
System.out.println(sendPingRequest("108.177.111.106"));
}
public static boolean sendPingRequest(String host) {
boolean value = false;
try {
InetAddress myip = InetAddress.getByName(host);
System.out.println("Sending Ping Request to " myip);
if (myip.isReachable(5000)) {
System.out.println("Host: " host " is reachable");
value = true;
} else {
System.out.println("Host: " host " is unreachable");
}
} catch (UnknownHostException e) {
System.out.println("I can't reach this host: " e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.out.println("IO Exception" e.getMessage());
}
return value;
}
}
и вывод
Sending Ping Request to www.google.com/74.125.195.105
Host: www.google.com is reachable
true
Sending Ping Request to /74.125.195.106
Host: 74.125.195.106 is reachable
true
Sending Ping Request to /108.177.111.106
Host: 108.177.111.106 is reachable
true
Возможно, у вас были проблемы с сетью?
Комментарии:
1. это работает, когда я делаю это через командную строку, но не на java… Я могу ошибаться, но эта строка кода InetAddress myip = InetAddress.getByName(host); кажется, возвращает больше, чем ip, и вместо этого возвращает www.google.com/74.125.195.105 , если вы попытались выполнить пинг www.google.com/74.125.195.105 это потерпит неудачу…
2. команда ping (как в командной строке) действительно завершится неудачей, но, как вы можете видеть выше, возврат www.google.com/74.125.195.105 это не проблема, так как я тоже получал его, и это не было проблемой. Метод .isReachable не использует команду ping для отправки своих запросов на ping, но имеет свою собственную реализацию. Формат имени хоста / Ip — это просто строковое представление InetAddress . Он использует только IP для фактического выполнения своего пинга. Я не уверен, почему Java будет сбой, если вы можете выполнить пинг с помощью командной строки, но это определенно не то, что вы написали в своем коде.