如何测试互联网速度(JavaSE)?

时间:2010-03-22 07:26:19

标签: java

有没有办法使用Java代码测试互联网速度?

例如,就像我们用cmd命令实际测试一样,ping命令。

提前致谢...

2 个答案:

答案 0 :(得分:4)

在这里看看如何在java中ping:

http://blog.taragana.com/index.php/archive/how-to-do-icmp-ping-in-java-jdk-15-and-above/

正如另一个家伙所说,这不是一个完美的解决方案,我调查了我们的代码库,因为我知道我们在这里使用ICMP数据包做了些什么:

http://www.savarese.com/software/rocksaw/

这意味着您必须编译一些JNI C才能访问rawsocket(win32和linux)。

但是你应该考虑更多的事情来获得关于互联网速度的提议:

  • 检查10秒内可能的连接数
  • 检查下载5MB文件需要多长时间
  • 检查上传5MB文件需要多长时间

与少量ping相结合可以给你带来很好的带宽和延迟效果

答案 1 :(得分:0)

使用 JSpeedTest

SpeedTestSocket speedTestSocket = new SpeedTestSocket();

// add a listener to wait for speedtest completion and progress
speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {

    @Override
    public void onCompletion(SpeedTestReport report) {
        // called when download/upload is complete
        System.out.println("[COMPLETED] rate in octet/s : " + report.getTransferRateOctet());
        System.out.println("[COMPLETED] rate in bit/s   : " + report.getTransferRateBit());
    }

    @Override
    public void onError(SpeedTestError speedTestError, String errorMessage) {
         // called when a download/upload error occur
    }

    @Override
    public void onProgress(float percent, SpeedTestReport report) {
        // called to notify download/upload progress
        System.out.println("[PROGRESS] progress : " + percent + "%");
        System.out.println("[PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
        System.out.println("[PROGRESS] rate in bit/s   : " + report.getTransferRateBit());
    }
});