从java检查服务可用性

如何使用java检查服务? 我发现了这篇文章 ,但它仅用于检查主机名。

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

该代码段会发送一个ping,您无法操纵它来实现您想要的效果。 只需打开一个套接字并捕获任何exception。

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

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

由于您的服务是Web服务,因此您可能需要添加响应代码的validation。

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

只是尝试连接到套接字。

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

如果没有抛出exception,则主机正在接受该端口上的连接。 如果不是,你通常会得到一个ConnectException 。

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

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

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

用try catch块环绕,你有一个解决方案。