0

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

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

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

4

3 回答 3

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) { }
    }

它可以工作,但有时我会收到该应用程序没有响应的消息,即使调整了套接字超时也是如此。

于 2013-06-27T06:04:36.657 回答
0

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

是的。尝试连接到它。那是万无一失的考验。当然,在需要之前不要这样做。不要试图预测未来。只需连接并处理故障。

于 2013-06-26T21:39:15.050 回答
-1

您可以尝试使用其主机名来定位服务器。优点:与动态 ip 地址不同,主机名的有效期可能更长。在以下示例中,两个网络接口可以引用同一主机。

byte[] b = { 10, 0, 0, 1 };

String name = "Hostname";

InetAddress ia = Inet4Address.getByAddress(b);
InetAddress ia2 = Inet4Address.getByName(name);

另一种可能的解决方案:在android上使用网络操作之前​​,必须从android manifest中获取相应的权限。我不太清楚,以下哪些是必备品:

<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" />
于 2013-06-26T13:21:01.510 回答