如何使用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