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撰写本文时)获得的地址。没有成功。
答案 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)