Android建议的简单速度测试应用程序

时间:2014-06-06 05:54:11

标签: android mobile network-programming wifi

有人能指出我的任何示例代码,解释(甚至稍微)如何为Android编写一个简单的wifi speedtest程序?我到处都看了!

提前致谢!

- 迈克尔

1 个答案:

答案 0 :(得分:1)

这并不容易。让我给你一些建议,但你需要进一步调查。

我不确定是否可以访问WiFi连接或3G连接的低级指标。假设它不可能,我的建议是针对某个服务器使用ping或类似ping的解决方案,并获得往返时间(RTT)。

现在,当您连接到服务器时,影响RTT的因素很多,主要是:

  • WiFi速度,拥塞和通信错误
  • 服务器整个路径的延迟,包括ISP容量和主干。
  • 路径中的拥塞
  • 响应服务器的速度

通常你执行ping来测试可达性和RTT的味道。 Ping通过ICMP Echo Request实现。但是,Java不提供发送ICMP消息的方法。因此,您可能尝试与某个服务器建立TCP连接。

您可以使用InetAddress :: isReachable多次超时,直到找到限制超时。我不推荐这个。

http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#isReachable(int)

我会创建一个TCP套接字并调用connect,然后确定自调用connect以来所花费的时间。当然,你必须处理影响速度的所有因素。

要考虑的另一点是,如果在TCP套接字中使用connect,则必须了解实际上存在三次握手:客户端发送SYNC,服务器发送SYN / ACK,客户端发送ACK。但是这最后的ACK并没有为连接的返回增加大量时间,因为它只是由客户端发送的。

话虽如此,我还是会提出一些建议:

我首先尝试使用WiFi,尝试建立到接入点的连接,端口80,8080或443.这将消除其他三个因素。

如果它不起作用,您可以尝试修复服务器,例如www.google.com。在这种情况下,您将不得不处理所有上述因素。

在3G的情况下,我不知道如何建立与接入点的连接,如UMTS中的网关GPRS支持节点。但考虑到上述所有4个因素,您可以连接到修复服务器。

其他一点需要考虑的是,当智能手机连接到WiFi和Cellular时,它总是使用WiFi。有一些方法可以强制它使用3g,但有些链接: Android: Force data to be sent over radio vs WiFi Force Android to use 3G when on local area wifi without net access

我希望这会有所帮助。