Java 如何获取internet连接延迟/ping?

Java 如何获取internet连接延迟/ping?,java,android,ping,latency,internet-connection,Java,Android,Ping,Latency,Internet Connection,我需要以毫秒为单位获取当前internet连接延迟。在对堆栈溢出进行研究后,我发现以下代码可以获取延迟: String host = "www.google.com"; int timeout = 10000; long beforeTime = System.currentTimeMillis(); boolean reachable = InetAddress.getByNa

我需要以毫秒为单位获取当前internet连接延迟。在对堆栈溢出进行研究后,我发现以下代码可以获取延迟:

            String host = "www.google.com";
            int timeout = 10000;
            long beforeTime = System.currentTimeMillis();
            boolean reachable =  InetAddress.getByName(host).isReachable(timeout);
            long afterTime = System.currentTimeMillis();
            long latency = afterTime - beforeTime;
我还尝试了
8.8.8.8
,这是谷歌DNS IP,结果是一样的

问题在于,在一些设备中,
latency
变量非常大,异常值,例如,从2014年开始,像素XL有时为60毫秒,有时为400毫秒,而android 5.0的慢速设备则始终在3000毫秒左右。另外,模拟器中的时间总是在6000毫秒左右,但我认为模拟器没有给出正确的值

在使用Android 5.0的设备中,该代码返回的延迟约为3000毫秒,当我打开它时速度非常快,如果我在设备导航器中尝试各种在线互联网连接测试,延迟为30毫秒,因此这3000毫秒的延迟是错误的。其他设备也是如此


如何在Android中正确测量延迟?

请尝试多次,检查平均值
isReachable
对于特定设备的实际功能并不确定。要获得可重复的结果,您应该真正执行一些特定的网络操作。您可以使用套接字,例如:。无论如何,您通常只能使用具有某种受控行为的服务器(例如,最容易使用自己的服务器),否则会引入各种未知的开销。@JensV您有这方面的工作代码吗?不被接受的解决方案是某种伪代码样本,没有实际的类名或实际用途,例如套接字变量等。。