我想测试是否可以使用Java访问远程系统,换句话说是使用Java“发送ping”。此功能应封装在具有布尔值的方法中,例如
public boolean isReachable(String ip) {
// what to do :-)
}
我已经测试了Java Process类,但我不认为这是最好的方法,因为OutputBuffers的输出处理很复杂。
Process proc = Runtime.getRuntime().exec("ping " + ip);
另一种可能性是创建一个套接字连接并处理抛出的异常,但如果远程系统是一个“裸”的unix系统,另一边可能没有Socket :-)另外,我希望能够在远程系统无法访问时设置超时。
那我怎么能这样做?谢谢!
答案 0 :(得分:42)
InetAddress.getByName(ip).isReachable(timeout);
答案 1 :(得分:9)
InetAddress.getByName(host).isReachable(timeOut)
(见here)
答案 2 :(得分:4)
看起来你正在使用Linux,所以你可能会发现 isReachable()是不可靠的(因为你没有权限发送ICMP数据包,很少有服务器运行Echo服务)
如果是这种情况,那么我认为你 需要按照你建议的方式使用生成过程,但我建议使用如下命令:
ping -c 1 hostname
这将在一次尝试后终止,然后您可以检查该过程的退出状态 - 比解析标准输出更可靠。
Ping返回0表示失败时成功非零。
答案 3 :(得分:1)
我知道这个问题找到了答案,但我想添加我的代码只是为了“复制粘贴”。
public boolean isIpReachable(String ip, int timeout){
boolean state = false;
try {
state = InetAddress.getByName(ip).isReachable(timeout);
} catch (IOException e) {
//Parse error here
}
return state;
}