从java检查服务可用性
如何使用java检查服务?我找到了,但它只用于检查主机名从java检查服务可用性,java,sockets,Java,Sockets,如何使用java检查服务?我找到了,但它只用于检查主机名 我的问题是如何检查端口x上的服务是否正在运行,例如:myhostname:8080或myhostname:8099,我可能正在这些端口上运行服务n或p,但如果我手动执行,它将通过web可见,我如何在java中实现相同的效果?您可以使用套接字来执行此操作 new Socket("localhost", 8080).getInputStream() 用try-catch块围绕它,你就有了一个解决方案。这个片段发送一个ping,你无法通过操纵
我的问题是如何检查端口x上的服务是否正在运行,例如:
myhostname:8080
或myhostname:8099
,我可能正在这些端口上运行服务n或p,但如果我手动执行,它将通过web可见,我如何在java中实现相同的效果?您可以使用套接字来执行此操作
new Socket("localhost", 8080).getInputStream()
用try-catch块围绕它,你就有了一个解决方案。这个片段发送一个ping,你无法通过操纵来实现你想要的。只要抓住任何例外
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;
}
如果您需要检测哪个服务正在运行,那么您需要读取发送的第一个字节,并将它们与您知道的每个服务应该发送的字节进行比较。这可能需要来回几次。只需尝试连接到套接字即可
InetAddress addr = InetAddress.getByName("myhostname");
Socket socket = new Socket(addr, 8099);
如果未引发异常,则主机正在该端口上接受连接。如果不是,您通常会得到一个。因为您的服务是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();
}
只要尝试使用该服务并在出现异常时进行处理即可。在使用任何资源之前,通常没有必要对其进行可用性测试。如果在测试时可用,而在使用时不可用,该怎么办?socket变量应该在try块之外,以便在finally块中关闭。@h3xStream我身上没有java编译器可供测试,但您确定这是必要的吗?如果socket构造函数引发异常,您无法关闭它,所以只需
新建套接字(主机、端口).close()try
块中的code>就可以了。@Greg你比我先做了,不过有一个麻烦是close()
会抛出一个IOException
,所以如果你想区分打开套接字时的失败和关闭套接字时的失败,在try中使用close
可能会使事情复杂化。不管怎样,这里不需要使用finally
。@Greg,@Laurence谢谢,我已经做了更改。