如何测试远程系统是否可访问

时间:2011-10-07 09:34:58

标签: java networking

我想测试是否可以使用Java访问远程系统,换句话说是使用Java“发送ping”。此功能应封装在具有布尔值的方法中,例如

public boolean isReachable(String ip) {
   // what to do :-)
}

我已经测试了Java Process类,但我不认为这是最好的方法,因为OutputBuffers的输出处理很复杂。

Process proc = Runtime.getRuntime().exec("ping " + ip);

另一种可能性是创建一个套接字连接并处理抛出的异常,但如果远程系统是一个“裸”的unix系统,另一边可能没有Socket :-)另外,我希望能够在远程系统无法访问时设置超时。

那我怎么能这样做?谢谢!

4 个答案:

答案 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;
}