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

标签 android mobile network-programming wifi

任何人都可以指出任何示例代码来解释(甚至稍微解释一下)如何为 Android 编写一个简单的 wifi 速度测试程序吗?我到处都看过了!

提前致谢!

-迈克尔

最佳答案

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

我不确定是否可以访问 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 和蜂窝网络时,它始终使用 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

希望对您有所帮助。

关于android - Android 上的简单速度测试应用程序建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075089/

相关文章:

Android AdMob FULL XML NAMESPACE 在任何地方发布?

Android wifi获取连接的Wifi的频率

javascript - 尝试使用自定义 header 访问网页时,Android webview 不加载 css 和 javascript

mysql - 插入MySQL表

android - 如何正确设计每侧带有 TextView 的 LinearLayout?

html - 移动 CSS 文件未加载

user-interface - 用于 j2me 移动应用程序的 GUI 库

javascript - 突出显示react-native-side-menu中查看的组件上的菜单项

java - 了解如何在读取套接字数据(InputStream)时检测断开连接

linux - 如何通过UDP管理多个客户端和值类服务器之间的中间桥接服务器的 session ?