2016-12-17 52 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請求也是值得的。

    比較後續的響應時間可以幫助您評估網絡狀態。