2016-12-17 37 views
10

我们的应用程序可用作支持Wi-Fi的设备的控制器。有时,当本地网络流量可怕时,设备很难接收到控制器应用发送的命令。如果发生这种情况,我们需要通知用户网络流量很糟糕,并告诉用户切换到另一台路由器。Android - 如何使用一部电话测量本地网络内的带宽质量

我们确实对我们要控制的设备有心跳。但是,即使没有达到那个阶段,问题也可能发生。我的意思是,首先我们的应用程序需要通过发送UDP数据包到多播地址来搜索设备。然后,当我们收到来自这些设备的响应后,我们将在它们之间建立一个连接。那是我们可以得到心跳的时候。我谈论的问题甚至是在刚刚搜索设备的阶段,如果网络流量很糟糕,我们的设备将无法接收到我们发送的UDP数据包。

到目前为止,这些都是我们的尝试:

  1. 启动一个HTTP服务器和客户端

我们启动了一个轻量级的HTTP服务器,放置在文件中有。然后我们创建一个客户端并下载该文件,并监控速度。但是这似乎不起作用,因为有回环。设备发现双方(http客户端和服务器)属于同一个区域(可能这个术语是错误的),所以下载甚至不能通过路由器。

  • 整合的iperf到我们的应用程序:
  • 这种解决方案的缺点是,该设备需要被生根。但是我们仍然尝试了iPerf的解决方案。我们在同一台设备上同时使用客户端和服务器进行了测试。但速度仍然没有改变。如果我们测试两个设备,一个作为服务器,另一个作为客户端,那么我们会得到一个很好的速度测试。但是,我们不能作为我们的客户为我们的产品使用两部手机,并且我们也不能要求他们根植手机。

    1. 使用开源库lib进行连接速度检查,由Facebook提供。

    我们在github中发现了一个开源的lib,用于检查连接速度的质量。但是,这需要互联网连接,以检查速度。但是我们的产品不需要用户连接互联网。用户只需要一个路由器和一个应用程序。所以,不幸的是,我们不能使用这个解决方案。

    1. 尝试搜索如何从同一设备下载文件时禁用回送。

    基于我们的第一次尝试,这是我们自己构建的唯一解决方案。我们试图检查文档是否有从相同设备下载文件时禁用环回的功能。不幸的是,我们没有得到任何好的结果。

    那么,我们的问题是:

    1. 如果我们的第一次尝试是接近的,那么如何才能禁用此回送的东西,使我们能够正确地监视下载速度?

    2. 如果我们的第一次尝试不够好,那么有没有其他方法可以在本地测试带宽?

    注意:不应该有任何互联网连接,并且不应该使用多个电话。

    在此先感谢!

    +0

    如果您的wifi设备与您的应用程序进行通信 - 如果您失去连接性,它们就不会有'心跳',您将提示用户。有想法(1)是在同一台机器上的http服务器和客户端?如果没有 - 您可以使用像wireshark这样的代理来检查是否有任何通信流量发生。 –

    +0

    @MorrisonChang是的,我们的设备确实有心跳。但只有当应用程序已经找到设备,然后通过套接字连接与它们连接时才会发生这种情况。我会更新我的问题。谢谢! –

    +0

    @MorrisonChang是的,服务器和客户端都在同一台机器上 –

    回答

    0

    虽然这是一个部分解决方案,它可以帮助检查:

    InetAddress.getByName(router).isReachable(timeOut) 
    

    因为它是解释here,它并不总是可行的,但如果它确实证明它是不是网络问题。

    由于大多数商用路由器都提供了网络接口,因此对路由器IP地址进行http和https请求也是值得的。

    比较后续的响应时间可以帮助您评估网络状态。