我正在尝试开发一个Android应用来衡量我的网络的上传和下载速度,这可能是我需要每2秒左右运行和分析一次。 SpeedTest.net
app是一款理想的app工作方式,但它不是开源的。而且,我需要它每2秒运行一次。完成测试需要几秒钟。
我该怎么做?目前,我只是在互联网上的某处下载一个小的随机.txt文件,并测量size/time-to-download
作为下载速率的衡量标准。但每次都会得到奇怪的结果。显然这种方法不起作用。
更新:下载完成。有关如何实现上传速度的任何建议吗?
答案 0 :(得分:8)
你需要下载一个相当大的文件,下载至少需要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);
}
}
所做的事情
就上传而言,你可以做同样的事情。一个粗略的伪代码:
{{1}}
答案 1 :(得分: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.
}