2014-06-06 35 views
0

任何人都可以指向我的任何示例代碼解釋(甚至是輕微)如何編寫一個簡單的WiFi speedtest程序爲Android?我到處看着!簡單的速度測試應用程序對Android的建議

提前致謝!

-Michael

+0

是否要測試Android設備所連接的WiFi的速度? – rodolk

+0

@rodolk這是正確的!我也想測試4g/3g的速度,但這可能是另一篇文章的問題:D – michael7795

+0

我試圖理解你打算的深度水平。您是否想過使用http訪問服務器並獲取整個往返時間,或者您想要訪問內核並測量低級別的第2層消息? – rodolk

回答

0

這並不容易。讓我給你一些建議,但你需要進一步調查。

我不確定是否可以訪問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套接字,並調用連接,然後確定它花了,因爲連接被稱爲時間。當然,你必須處理所有影響速度的因素。

另一點要考慮的是,如果你使用TCP套接字連接,你必須明白,實際上有一個三方握手:客戶端發送SYNC,服務器發送SYN/ACK,客戶端發送ACK。但是這個最後的ACK不會爲連接的返回增加很多時間,因爲它只是由客戶端發送的。

話雖如此,我會提出一些建議去:

第一件事,我會嘗試,只能用無線網絡,試圖建立與接入點的連接,端口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

我希望這有助於。