2011-01-10 55 views
2

如何使用java檢查服務?我發現this article,但它僅用於檢查主機名。從java檢查服務可用性

我的問題是我如何檢查端口x的運行服務,例如:myhostname:8080myhostname:8099,我可能會在這些端口上運行服務n或p,但如果我手動執行它可以通過網絡看到,怎麼可以我在java中實現相同的效果?

回答

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

如果需要檢測哪個服務正在運行,那麼你需要閱讀發送的第一個字節,並將它們與你所知道的每一個服務應該送。這可能需要幾次來回傳遞。

+0

套接字變量應該在try塊之外,以便在finally塊中關閉。 – h3xStream 2011-01-10 23:45:34

0

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

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

用try catch塊環繞,你有一個解決方案。

+0

再加上close()。 – EJP 2011-01-10 23:27:28

2

只是試圖連接到插座。

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

如果沒有拋出異常,則主機正在接受該端口上的連接。如果不是,你通常會得到一個ConnectException

3

由於您的服務是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(); 
} 
1

只是試圖使用服務並處理異常。在使用它之前,測試任何資源的可用性通常沒有意義。如果它在測試時可用,而不是在使用時會怎樣?