Проверить доступность услуги с Java - PullRequest
2 голосов
/ 11 января 2011

Как я могу проверить сервис, используя Java? Я нашел эту статью , но это только для проверки имени хоста.

У меня вопрос, как я могу проверить, работает ли служба на порту x, например: myhostname:8080 или myhostname:8099, возможно, я использую службу n или p на этих портах, но это будет видно через Интернет, если я сделаю это вручную Как я могу добиться того же эффекта в Java?

Ответы [ 5 ]

5 голосов
/ 11 января 2011

Этот фрагмент посылает пинг, которым вы не можете манипулировать, чтобы добиться того, чего вы хотите. Просто откройте сокет и поймайте все исключения.

bool success = true;
try {
  (new Socket(host, port)).close();
} catch (UnknownHostException e) {
  // unknown host
  success = false;
} catch (IOException e) {
  // io exception, service probably not running
  success = false;
}

Если вам необходимо определить, какая служба запущена, вам нужно прочитать первые отправленные байты и сравнить их с тем, что, как вы знаете, должна отправлять каждая служба. Это может потребовать несколько проходов назад и вперед.

3 голосов
/ 11 января 2011

Так как ваши услуги являются веб-, вы можете добавить подтверждение кода ответа.

boolean available = false;
HttpURLConnection conn = null;
try {
    conn = (HttpURLConnection) new URL("http://yourdomain/").openConnection();
    conn.connect();

    if(conn.getResponseCode() == 200)
        available = true;
}
catch(IOException e) {
}
finally {
    if(conn != null)
        conn.disconnect();
}
2 голосов
/ 11 января 2011

Просто попытайтесь подключиться к сокету.

InetAddress addr = InetAddress.getByName("myhostname");
Socket socket = new Socket(addr, 8099);

Если это не выдает исключение, то хост принимает подключения к этому порту.Если это не так, обычно вы получаете ConnectException .

1 голос
/ 11 января 2011

Просто попробуйте воспользоваться услугой и иметь дело с исключениями по мере их возникновения. Как правило, нет смысла проверять какой-либо ресурс на доступность до его использования. Что если он был доступен при тестировании, а не при его использовании?

0 голосов
/ 11 января 2011

Для этого можно использовать сокеты.

new Socket("localhost", 8080).getInputStream()

Окружите это блоком try catch, и вы получите решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...