7

我正在尝试开发一个 Android 应用程序来测量我的网络的上传和下载速度,我可能需要每 2 秒左右运行一次并对其进行分析。SpeedTest.netapp 是一个理想的类似工作的应用程序,但是,它不是开源的。此外,我需要它每 2 秒运行一次。完成测试需要几秒钟。

我怎样才能做到这一点?目前,我只是下载一个在 Internet 上某处找到的小型随机 .txt 文件,并size/time-to-download作为下载速率的衡量标准。但我每次都会得到奇怪的结果。显然这种方法行不通。

更新:下载完成。关于如何实现上传速度的任何建议?

4

2 回答 2

7

您需要下载一个相当大的文件,至少需要 15 秒才能下载。文件越大,您收到的结果就越好。使用具有高可用性的始终在线服务器。另外,仅在网络调用时使用累积(我相信您必须使用一些套接字在while循环中读取。所以在System.currentTimeMillis()之前和之后socket.read()继续添加它们)

这也SpeedTest.net差不多

就上传而言,您可以做同样的事情。粗略的伪代码:

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);
     }
}
于 2016-02-21T13:38:35.667 回答
5

要进行上传,您需要设置与服务器的双向通信。我会用一个简单的循环来做到这一点:

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.
}
于 2016-02-24T23:41:43.723 回答