检查服务器可用性不起作用

时间:2013-06-26 12:49:40

标签: android networking

我正在尝试检查服务器是否可用但是在运行此代码时出现错误,即服务器不可用或有时应用程序冻结,即使服务器正常运行:

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!");
        } 

有没有更好的方法来检查服务器是否在线?

3 个答案:

答案 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" />
相关问题