2010-08-20 66 views
5

有没有人有关于如何计算套接字的带宽使用的任何提示?计算通过套接字发送/接收的数据的带宽速度?

例如,当我通过套接字将数据发送到我连接的服务器时,我想显示正在发送的Kb/s。

谷歌搜索没有透露任何有用的东西。也许我在寻找错误的术语。

+0

本文可能会给你一些想法:http://www.roseindia.net/javatutorials/counting_bytes_on_sockets.shtml – darri 2010-08-22 00:29:26

回答

5

最好的你可能会很容易做的是记录你什么时候开始写,然后计算你已经成功发送到Socket.getOutputStream.write()方法的字节。对于少量的数据,这将是非常不准确的,因为它只是填满了操作系统的传输缓冲区,最初的传输速度比实际发送它们要快得多。

但是,它应该分摊到基本上相当大数据量的正确率。

+0

这将工作在理论上,但它不会提供一个非常准确的表示在当前的传输速度时刻。例如:如果我登录了5分钟......第一个2.5分钟无所事事,最后2.5分钟发送100kb /秒。在5分钟结束时,它会告诉我速度平均为50kb/s。 自从我开始传输以来,我不在寻找平均速度。 我正在寻找目前的速度。也许最后5秒的平均时间可以工作,但我不知道要记录类似的事情。 – 2010-08-21 23:06:41

+1

这就是移动平均值:http://en.wikipedia.org/wiki/Moving_average。尽管有各种方法,但计算起来相当简单。在任何时候都没有计算带宽的事情;由于数据是离散的,你必须有一个平均值。一个非常简单的方法是“average =(average + new_measurement_average)/2.0'。 – 2010-08-22 02:31:38

+2

注意:Guava的[CountingOutputStream](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/CountingOutputStream.html)可以很容易地将输出流与另一个流进行封装它计算它写入的字节数。 – 2013-02-05 21:21:51

相关问题