从java检查服务可用性

时间:2011-01-10 22:35:43

标签: java sockets

如何使用java检查服务?我找到了this article,但它只用于检查主机名。

我的问题是我如何检查端口x上运行的服务,例如:myhostname:8080myhostname:8099,我可能在这些端口上运行服务n或p,但是如果通过网络可以看到它我手动完成,如何在java中实现相同的效果?

5 个答案:

答案 0 :(得分:5)

该代码片段会发送一个ping,您无法操纵它来达到您想要的效果。只需open a socket并抓住任何例外。

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;
}

如果您需要检测正在运行的服务,则需要读取发送的第一个字节,并将它们与您知道每个服务应发送的内容进行比较。这可能需要来回几次。

答案 1 :(得分:3)

由于您的服务是网络服务,因此您可能需要添加响应代码验证。

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 :(得分:2)

只是尝试连接到套接字。

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

如果没有抛出异常,则主机正在接受该端口上的连接。如果不是,您通常会获得ConnectException

答案 3 :(得分:1)

只是尝试使用该服务并处理出现的异常。在使用之前测试任何资源的可用性通常没有意义。如果测试时可用,而不是在使用时可用,该怎么办?

答案 4 :(得分:0)

您可以使用套接字执行此操作。

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

使用try catch块进行环绕,你就有了解决方案。