Android 平台 HTTP网速测试 案例 API 分析

本文深入分析了Android平台上的HTTP网速测试,涵盖了HttpClient、HttpUriRequest、HttpResponse、StatusLine和HttpEntity等关键API的使用。通过建立多TCP连接,发送HTTP GET请求,测试平台传送64kByte内容,计算平均和实时速率,实现网速测量。文中还提供了GitHub上的源码示例,详细解释了网速测试的核心代码和相关API的用法。
摘要由CSDN通过智能技术生成

工信部规定的网速测试标准 : 除普通网页测速采用单线程外,用户宽带接入速率测试应使用多线程(多TCP连接)HTTP下载进行测速,测试中使用的线程数量为N(N≥4)。

-- 建立连接 : 用户终端设备发起测试请求后,与测速平台建立 N 条 TCP 连接,并在每一条 TCP 连接上发送HTTP[GET]请求发起一次测试过程。
-- 请求文件 : 对每一个 HTTP[GET]请求,宽带接入速率测试平台以 HTTP 200 OK 响应,并开始传送测速文件。
-- 下载文件 : 对每一条连接,宽带接入速率测试平台持续从内存直接发送 64kByte 大小的内容。
-- 平均速率 : 从收到第 1 个 HTTP[GET]请求开始计时,宽带接入速率测试平台及客户端软件每隔 1s 统计已经发送的文件大小,计算数据平均传送速率,并在网页上或客户端中实时更新。
-- 实时速率 : 宽带接入速率测试平台同时计算每 1s 间隔内的实时数据传送速率。
-- 测量时间 : 15s 后宽带接入速率测试平台停止发送数据,计算第 5s 到第 15s 之间共计 10s 的平均速率及峰值速率,峰值速率为步骤 5)中的每秒实时速率的最大值.



一. 网速测试核心代码


从GitHub上下载的源码, 应该没有按照工信部的标准写的;


在 GitHub 上找到的网速测试的核心代码 : 

-- GitHub 地址 : https://github.com/Mobiperf/Speedometer.git ;

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** Runs the HTTP measurement task. Will acquire power lock to ensure wifi is not turned off */  
  2. @Override  
  3. public MeasurementResult call() throws MeasurementError {  
  4.     
  5.   int statusCode = HttpTask.DEFAULT_STATUS_CODE;  
  6.   long duration = 0;  
  7.   long originalHeadersLen = 0;  
  8.   long originalBodyLen;  
  9.   String headers = null;  
  10.   ByteBuffer body = ByteBuffer.allocate(HttpTask.MAX_BODY_SIZE_TO_UPLOAD);  
  11.   boolean success = false;  
  12.   String errorMsg = "";  
  13.   InputStream inputStream = null;  
  14.     
  15.   try {  
  16.     // set the download URL, a URL that points to a file on the Internet  
  17.     // this is the file to be downloaded  
  18.     HttpDesc task = (HttpDesc) this.measurementDesc;  
  19.     String urlStr = task.url;  
  20.           
  21.     // TODO(Wenjie): Need to set timeout for the HTTP methods  
  22.     httpClient = AndroidHttpClient.newInstance(Util.prepareUserAgent(this.parent));  
  23.     HttpRequestBase request = null;  
  24.     if (task.method.compareToIgnoreCase("head") == 0) {  
  25.       request = new HttpHead(urlStr);  
  26.     } else if (task.method.compareToIgnoreCase("get") == 0) {  
  27.       request = new HttpGet(urlStr);  
  28.     } else if (task.method.compareToIgnoreCase("post") == 0) {  
  29.       request = new HttpPost(urlStr);  
  30.       HttpPost postRequest = (HttpPost) request;  
  31.       postRequest.setEntity(new StringEntity(task.body));  
  32.     } else {  
  33.       // Use GET by default  
  34.       request = new HttpGet(urlStr);  
  35.     }  
  36.       
  37.     if (task.headers != null && task.headers.trim().length() > 0) {  
  38.       for (String headerLine : task.headers.split("\r\n")) {  
  39.         String tokens[] = headerLine.split(":");  
  40.         if (tokens.length == 2) {  
  41.           request.addHeader(tokens[0], tokens[1]);  
  42.         } else {  
  43.           throw new MeasurementError("Incorrect header line: " + headerLine);  
  44.         }  
  45.       }  
  46.     }  
  47.       
  48.       
  49.     byte[] readBuffer = new byte[HttpTask.READ_BUFFER_SIZE];  
  50.     int readLen;        
  51.     int totalBodyLen = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值