【问题标题】:Simple speed test app on Android suggestionsAndroid 建议上的简单速度测试应用程序
【发布时间】:2014-07-27 07:49:22
【问题描述】:

任何人都可以指出任何解释(甚至稍微)如何为 Android 编写简单的 wifi speedtest 程序的示例代码吗?我到处找了!

提前致谢!

-迈克尔

【问题讨论】:

  • 你想测试安卓设备所连接的WiFi的速度吗?
  • @rodolk 没错!我还想测试 4g/3g 的速度,但这可能是另一个帖子的问题:D
  • 我正在尝试了解您的意图的深度。您是在考虑使用 http 访问服务器并获取整个往返时间,还是想深入内核并测量低级第 2 层消息?
  • @rodolk 由于我刚刚开始使用 Android 和网络,我希望对服务器进行高级 ping、下载文件、测量传输的总位数和时间等。在某一时刻我想要做低级的事情,但我的优先级是高级。谢谢!
  • 我写了一个回复,其中包含一些可以帮助您的建议。让我知道它是否有用。

标签: android mobile network-programming wifi


【解决方案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​​ 并没有为 connect 的返回增加大量时间,因为它只是由客户端发送的。

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

我会尝试的第一件事是尝试建立与接入点、端口 80、8080 或 443 的连接。这将消除其他最后三个因素。

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

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

要考虑的其他一点是,当智能手机连接到 WiFi 和蜂窝网络时,它总是使用 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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多