java实现ping功能,是否到达地址的返回值为什么总是false?

这是测试代码:
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class TestPing {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String host = "www.baidu.com";
    int timeOut = 3000;
    try {
        boolean statu = InetAddress.getByName(host).isReachable(timeOut);
        System.out.println(statu);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

换种方式实现吧,代码如下:
[quote]

/*
* * 能否ping通IP地址
*
* @param server IP地址
*
* @param timeout 超时时长(毫秒)
*
* @return true能ping通
*/
public static boolean pingServer(String server, int timeout)
{
BufferedReader in = null;
Runtime r = Runtime.getRuntime();

    String pingCommand = "ping " + server + " -n 1 -w " + timeout;
    try
    {
        Process p = r.exec(pingCommand);
        if (p == null)
        {
            return false;
        }
        in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null)
        {
            if (line.startsWith("Reply from"))
            {
                return true;
            }
        }

    }
    catch (Exception ex)
    {
        ex.printStackTrace();
        return false;
    }
    finally
    {
        try
        {
            in.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    return false;
}

[/quote]

你采用的这种方式因为防火墙或者是服务器的配置可能导致请求阻塞,导致操作超时。