0

我在我的应用程序中使用了 InetAddress.getByName.isReachable() 一段时间,以了解移动设备是否可以访问服务器。但是,这需要 Windows 7 中的权限,我想知道是否有其他方法可以在不需要在 Windows 7 防火墙上添加权限的情况下执行此操作。这是我的使用方法:

boolean isReachable = false;
    try{
        isReachable = InetAddress.getByName("10.0.0.13").isReachable(1000);
    } catch (Exception e){
        Log.e("InetAddress", e.getMessage());
}finally {
    if (isReachable) {
        new CreateCandidato().execute();
    }else{
        Toast.makeText(getApplicationContext(), R.string.errorserver, Toast.LENGTH_LONG).show();
    }
}

有更好的解决方案吗?谢谢

4

1 回答 1

1

您的应用程序应该尝试连接并处理ConnectException何时以及是否出现。这些你试图预见未来并猜测会发生什么的游戏基本上是在浪费时间。发现任何资源是否可用的最好方法是尝试使用它。在这种情况下:

  1. 服务器可能正在响应 ICMP,但根本没有响应 TCP。
  2. 服务器可以响应 ICMP 或 TCP 端口 7,但服务仍然无法运行。
  3. 服务器可以响应 ICMP 或 TCP 端口 7,并且该服务可以在该实例上运行,但稍后当您尝试连接时会立即关闭。
  4. 服务器无法响应 ICMP 或 TCP 端口 7,但服务器可能正在运行。

等等等等。不要试图预测未来。

于 2013-08-14T02:24:12.180 回答