我在应用程序中使用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();
}
}
有更好的解决方案吗?
谢谢
最佳答案
您的应用程序应该尝试在出现ConnectException
时及其出现时进行连接和处理。您尝试预见未来并猜测将要发生的事情的这些游戏基本上是在浪费时间。发现任何资源是否可用的最佳方法是尝试使用它。在这种情况下:
服务器可能响应ICMP,但根本不响应TCP。
服务器可以响应ICMP或TCP端口7,但该服务仍无法运行。
服务器可以响应ICMP或TCP端口7,并且该服务可以在该实例上运行,但是稍后在尝试连接时立即关闭。
服务器无法响应ICMP或TCP端口7,但服务器可能正在运行。
等等等等。不要试图预言未来。
关于java - Java InetAddress.getByName.isReachable()替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18182088/