如何使用java检查服务?我找到了this article,但它只用于检查主机名。
我的问题是我如何检查端口x上运行的服务,例如:myhostname:8080
或myhostname:8099
,我可能在这些端口上运行服务n或p,但是如果通过网络可以看到它我手动完成,如何在java中实现相同的效果?
答案 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块进行环绕,你就有了解决方案。