2013-06-26 70 views
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!"); 
     } 

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

+0

我找到简单的解决方案在http://stackoverflow.com/a/15785326/1866833 感谢所有。 – Josef

回答

-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" /> 
+1

(1)这里没有任何回答实际问题的东西。 (2)关于动态API地址的问题没有任何问题:实际上,问题显示了一个*本地* IP地址。 (3)连接许可失败也没有。 -1 – EJP

+0

它不起作用。 @EJP是对的。 – Josef

0

有没有什么更好的方法来检查,如果服务器在线

是。尝试连接到它。这是一个可靠的测试。当然,直到你需要时才去做。不要试图预测未来。只需连接并处理失败。

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

它的工作原理,但有时我得到meesage该应用程序没有响应,即使套接字超时被调整。

+0

我不知道为什么当你有八小时考虑你不应该试图预测未来的时候,你试过这个。只要尝试在需要连接时建立连接*,并在当时处理失败*无论如何你必须这样做:为什么要处理两次? – EJP