我正在尝试检查服务器是否可用但是在运行此代码时出现错误,即服务器不可用或有时应用程序冻结,即使服务器正常运行:
InetAddress in;
in = null;
try {
in = InetAddress.getByAddress(new byte[] { (byte)192, (byte)168, (byte)16, (byte)48});
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (in.isReachable(5000)) {
loadProduct();
} else
{
showAlertBox("Warning", "Server not available!");
}
} catch (IOException e) {
showAlertBox("Warning", "Server not available!");
}
有没有更好的方法来检查服务器是否在线?
答案 0 :(得分:0)
有没有更好的方法来检查服务器是否在线
是。尝试连接到它。这是 绝对正确的 测试。当然,在你需要之前不要这样做。不要试图预测未来。只需连接并处理故障。
答案 1 :(得分:0)
我试过这个
Socket socket = null;
boolean reachable = false;
try {
socket = new Socket("192.168.16.48", 80);
reachable = true;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showAlertBox("Warning", "Server not available!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showAlertBox("Warning", "Server not available!");
} finally {
if (socket != null) try { socket.close(); } catch(IOException e) { }
}
它可以正常工作,但有时我会觉得应用程序没有响应,即使调整了套接字超时。
答案 2 :(得分:-1)
您可以尝试使用其主机名找到服务器。优点:与动态IP地址不同,主机名可能具有更长的有效性。在以下示例中,两个网络接口都可以引用同一主机。
byte[] b = { 10, 0, 0, 1 };
String name = "Hostname";
InetAddress ia = Inet4Address.getByAddress(b);
InetAddress ia2 = Inet4Address.getByName(name);
另一种可能的解决方案:在Android上使用网络操作之前,必须从android清单中获取相应的权限。我不确切地知道,以下哪些是必须的:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />