2011-10-21 39 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