如何检查Android中的服务器可用性?

时间:2011-10-21 06:29:32

标签: android

InetAddress address = InetAddress.getByAddress( new byte[] { (byte) 192, (byte) 168, (byte) 254, (byte) 10 ); success = address.isReachable( 3000 );

即使我有理由确定它是可到达的地址,也会返回false。

我发现如果我将其更改为127,0,0,1,则会返回成功。

我的下一次尝试是相同的代码,但我使用了从www.google.com ping(72.167.164.64撰写本文时)获得的地址。没有成功。

2 个答案:

答案 0 :(得分:3)

您可以在服务器上创建一个servlet /网页或任何您觉得舒服的东西,这取决于您的Android服务器状态,您必须调用该URL并检查返回值,同样在您的try / catch上您必须注意特定的例如,与超时相关的异常,如果您的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();
}

这只是想法......有很多方法可以检查服务器的可用性

答案 1 :(得分:2)

检查服务器是否可用

InetAddress.getByName(host).isReachable(timeOut)