Android 中的上传和下载速率分析

Upload and Download rate profiling in Android

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

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

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

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

这几乎就是 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);
     }
}

要进行上传,您需要与服务器建立双向通信。我会用一个简单的循环来完成:

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