2016-02-21 18 views
7

Sto provando a sviluppare un'applicazione Android per misurare la velocità di upload e download della mia rete, che probabilmente avrei dovuto eseguire e profilare ogni 2 secondi circa. L'app SpeedTest.net è un'app ideale che funziona in modo simile, tuttavia non è open source. Inoltre, avrei bisogno che fosse eseguito ogni 2 secondi. Ci vogliono un paio di secondi per finire il test.Upload and Download rate profiling in Android

Come posso farlo? Attualmente sto solo scaricando un piccolo file .txt casuale trovato da qualche parte su Internet e misura size/time-to-download come misura del tasso di download. Ma ottengo risultati strani ogni volta. Apparentemente questo approccio non funziona.

AGGIORNAMENTO: il download è terminato. Qualche consiglio su come implementare le velocità di upload?

risposta

8

È necessario scaricare un file considerevolmente grande, che richiede almeno 15 secondi per il download. Più grande è il file, il risultato migliore che riceveresti. Utilizzare un server sempre attivo con alta disponibilità. Inoltre, l'accumulo di utilizzo del momento della propria rete solo chiamate (credo che è necessario utilizzare una certa presa di leggere in un ciclo while. Quindi, fare System.currentTimeMillis() prima e dopo socket.read() e tenerli aggiungendo)

Questo è più o meno quello SpeedTest.net fa anche

Per quanto riguarda il caricamento, è possibile fare la stessa cosa. Una pseudo codice di massima:

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

per fare l'arrivi, sarà necessario impostare una comunicazione a due vie con il server. Lo farei con un semplice ciclo:

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. 
}