2011-10-21 72 views
-3

InetAddress address = InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 254, (byte) 10); success = address.isReachable(3000);如何檢查Android中的服務器可用性?

這返回false即使我有理由相信這是一個可達地址。

我發現如果我將其更改爲127,0,0,1,它將返回成功。

我的下一次嘗試是相同的代碼,但我使用了從www.google.com(本文撰寫時爲72.167.164.64)的ping中獲得的地址。沒有成功。

PLZ給我的解決方案

+1

什麼服務器/主機? – Jong

+0

@jong你瞭解服務器嗎? – Piyush

+0

哪個服務器... – Jong

回答

3

您可以創建任何你覺得舒服,返回OK或錯誤取決於服務器上的一個servlet /網頁或你的android的服務器狀態必須調用該url並檢查返回的值,同樣在你的try/catch上,你必須注意與timeout相關的特定異常,如果你的http請求返回200,那麼檢查http狀態,那麼你就可以獲取來自該URL的服務器狀態

檢查http://developer.android.com/reference/java/net/HttpURLConnection.html

boolean isOK = false; 
try { 
    URL url = new URL("http://yourserverurl/yourstatusmethod"); 
    HttpURLConnection urlcon = (HttpURLConnection) url.openConnection(); 
    urlcon.connect(); 
    if (urlcon.getResponseCode() == 200) { 
      InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
      String serverStatus = readStream(in); //assuming that "http://yourserverurl/yourstatusmethod" returns OK or ERROR depending on your server status check   
      isOK = (serverStatus.equalsIgnoreCase("OK")); 
    }else{ 
     isOK = false; 
    } 

    url.disconnect(); 

} catch (MalformedURLException e1) { 
      isOK = false; 
      e1.printStackTrace(); 
} catch (IOException e) { 
      isOK = false; 
      e.printStackTrace(); 
} 

的readStream是轉換的InputStream串

public static String readStream (InputStream in) throws IOException { 
    StringBuffer out = new StringBuffer(); 
    byte[] b = new byte[4096]; 
    for (int n; (n = in.read(b)) != -1;) { 
     out.append(new String(b, 0, n)); 
    } 
    return out.toString(); 
} 

的方法,這只是和想法....有很多的方法來檢查服務器的可用性

+0

ok thnx,但你有任何InetAddress.getByName(host).isReachable(timeOut)的例子來理解.. – Piyush

2

要檢查服務器是否可用與否

InetAddress.getByName(host).isReachable(timeOut) 
+0

你可以解釋使用示例?plz – Piyush

+0

這也可以工作xDDD,因爲它確定主機的IP地址,給定主機名稱。主機名稱可以是機器名稱,例如「java.sun.com」,也可以是其IP地址的文本表示 – yeradis

+0

確定@yeradis InetAddress.getByName(host).isReachable(timeOut) is在android上工作? – Piyush