2016-02-21 8 views
7

Próbuję stworzyć aplikację dla systemu Android, aby zmierzyć szybkość wysyłania i pobierania mojej sieci, co prawdopodobnie wymagałoby uruchomienia i profilowania co 2 sekundy. Aplikacja SpeedTest.net to idealna aplikacja działająca podobnie, jednak nie jest open-source. Co więcej, potrzebowałbym go uruchamiać co 2 sekundy. Potrwa to kilka sekund.Profilowanie szybkości wysyłania i pobierania w systemie Android

Jak mogę to zrobić? Obecnie po prostu pobieram mały losowy plik .txt znaleziony gdzieś w Internecie i mierzę size/time-to-download jako miarę szybkości pobierania. Ale za każdym razem uzyskuję dziwne wyniki. Najwyraźniej to podejście nie działa.

AKTUALIZACJA: pobieranie jest zakończone. Wszelkie porady dotyczące wdrażania prędkości wysyłania?

Odpowiedz

8

Musisz pobrać znacznie większy plik, co trwa co najmniej 15 sekund. Im większy plik, tym lepszy wynik otrzymasz. Używaj zawsze stałego serwera z wysoką dostępnością. Ponadto, zastosowanie kumulacja w czasie swojej sieci wymaga jedynie (wierzę, że musi używać jakieś gniazdo czytać w while pętli. Więc System.currentTimeMillis() przed i po socket.read() i dodajemy je)

To jest dość dużo, co SpeedTest.net ma również

Jeśli chodzi o przesyłanie, możesz zrobić to samo. Szorstki pseudo kod:

upload (String remote, InputStream localfile){ 
    Socket s = openDataConnection(remote); 
    OutputStream os = new BufferedOutputStream (s.getOutputStream(), MAX_BUFFER_SIZE); 

    byte[] buffer = new byte[MAX_BUFFER_SIZE]; 
    long totalTime = 0L; 
    while((buffer = localfile.read())!= -1){ 
     long startTime = System.currentTimeMillis(); 
     os.write(buffer); 
     long endTime = System.currentTimeMillis(); 
     totalTime += (endTime - startTime); 
    } 
} 
5

Aby przesłać pliki, musisz skonfigurować dwukierunkową komunikację z serwerem. Zrobiłbym to z prostą pętlą:

while(x){ 
Starttime =getCurrentTime() 
Sendfile() //Send a Xmb file that the server can verify 
waitForVerification() // Wait for a reply from server. 
compareCurrentTimeWithStartingTime() // compare the times. 
} 
Powiązane problemy