如何使用java检查服务?我发现this article,但它仅用于检查主机名。从java检查服务可用性
我的问题是我如何检查端口x的运行服务,例如:myhostname:8080
或myhostname:8099
,我可能会在这些端口上运行服务n或p,但如果我手动执行它可以通过网络看到,怎么可以我在java中实现相同的效果?
如何使用java检查服务?我发现this article,但它仅用于检查主机名。从java检查服务可用性
我的问题是我如何检查端口x的运行服务,例如:myhostname:8080
或myhostname:8099
,我可能会在这些端口上运行服务n或p,但如果我手动执行它可以通过网络看到,怎么可以我在java中实现相同的效果?
该代码段发送一个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;
}
如果需要检测哪个服务正在运行,那么你需要阅读发送的第一个字节,并将它们与你所知道的每一个服务应该送。这可能需要几次来回传递。
您可以使用套接字来执行此操作。
new Socket("localhost", 8080).getInputStream()
用try catch块环绕,你有一个解决方案。
再加上close()。 – EJP 2011-01-10 23:27:28
只是试图连接到插座。
InetAddress addr = InetAddress.getByName("myhostname");
Socket socket = new Socket(addr, 8099);
如果没有抛出异常,则主机正在接受该端口上的连接。如果不是,你通常会得到一个ConnectException。
由于您的服务是Web,您可能需要添加验证的响应代码。
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();
}
只是试图使用服务并处理异常。在使用它之前,测试任何资源的可用性通常没有意义。如果它在测试时可用,而不是在使用时会怎样?
套接字变量应该在try块之外,以便在finally块中关闭。 – h3xStream 2011-01-10 23:45:34