基本原理是访问稳定的网页来测试速度,或者利用稳定的下载地址来测速,比如QQ.EXE

网页粒度小 测试没有 下载地址 稳定准确

界面MFC完成,网络API使用CURL

HttpClient.cpp

#include "stdafx.h"

#include"HttpClient.h"

#include "HttpRequest.h"

#include "HttpRespone.h"

#include "curl.h"

#include

#include

using namespace std;

static int write_data(void *buffer, size_t size, size_t buffer_size, void *_respone)

{

HttpRespone *respone = (HttpRespone*)_respone;

HttpRequest*request = respone->getHttpRequest();

respone->writeData(buffer, buffer_size);

//request->release();

const HttpCallBack & x = request->getHttpCallback();

x(request, respone);

return buffer_size;

}

HttpClient* HttpClient::getInstance()

{

static HttpClient*ins = nullptr;

if (ins == nullptr)

{

ins = new HttpClient;

}

return ins;

}

void HttpClient::doRequest_curl(HttpRequest*request)

{

HttpRespone *respone = HttpRespone::create();

CURL*easy_handle = curl_easy_init();

curl_easy_setopt(easy_handle, CURLOPT_URL, request->getUrl().c_str());

curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, write_data);

curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, respone);

respone->setHttpRequest(request);

request->setCURLhandle(easy_handle);

// perform

auto succ = curl_easy_perform(easy_handle);

}

void HttpClient::workFunc()

{

while (true)

{

HttpRequest* request;

_mutex.lock();

if (_queue_request.size() <= 0)

{

_condition.wait(_mutex);

}

request = _queue_request.front();

_queue_request.pop();

_mutex.unlock();

//log("net thread %d", _queue_request.size());

this->doRequest_curl(request);

}

}

void HttpClient::setTimeoutForConnect(int t)

{

this->_time_connect = t;

}

void HttpClient::setTimeoutForRead(int t)

{

this->_time_read = t;

}

HttpClient::HttpClient()

{

this->_time_connect = 5;

this->_time_read = 10;

curl_global_init(CURL_GLOBAL_WIN32);

/*auto t = std::thread([=]

{

this->workFunc();

});

t.detach();

*/

}

void HttpClient::send(HttpRequest*request)

{

//request->retain();

/*_mutex.lock();

_queue_request.push(request);

_mutex.unlock();

_condition.notify_one();

*/

this->doRequest_curl(request);

}

HttpClient::~HttpClient()

{

_condition.notify_all();

}

按钮响应事件

int total = 0;

int max = 0;

int min = 0xffffff;

char s[500];

for (int i = 0; i < 10; i++)

{

int sp = download();

total += sp;

sprintf(s, "%d KB/s", sp);

_txt_current.SetWindowTextW(toUnicode(s));

_size_total = 0;

sprintf(s, "%d KB/s", total / (i + 1));

_txt_total.SetWindowTextW(toUnicode(s));

if (sp > max)

{

max = sp;

sprintf(s, "%d KB/s", max);

_txt_max.SetWindowTextW(toUnicode(s));

}

if (sp < min)

{

min = sp;

sprintf(s, "%d KB/s", min);

_txt_min.SetWindowTextW(toUnicode(s));

}

}

sprintf(s, "0 KB/s");

_txt_current.SetWindowTextW(toUnicode(s));

MessageBox(_T("测速完成"), _T("完成"), MB_OK);

download函数

static int download()

{

CURL *curl;

CURLcode res;

struct FtpFile ftpfile = {

"1.exe",

NULL

};

curl = curl_easy_init();

int t = clock();

if (curl) {

//http://www.winrar.com.cn/download/wrar531scp.exe

curl_easy_setopt(curl, CURLOPT_URL, "http://www.qq.com");

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);,

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

//curl_easy_setopt(curl, CURLOPT_USERPWD, "SUREN:SUREN");

t1 = clock();

res = curl_easy_perform(curl);

curl_easy_cleanup(curl);

}

if (ftpfile.stream)

{

fclose(ftpfile.stream);

}

//log("1.txt", " %d S %d KB/S %d KB", (clock() - t), _size_total/(clock() - t), _size_total / 1024);

return _size_total / (clock() - t);

}

java 网速测试_简易的网速测试 - 梦想游戏 - OSCHINA - 中文开源技术交流社区相关推荐

  1. emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...

  2. java运动员最佳配对_运动员最佳配对问题 - osc_y1pyjby5的个人空间 - OSCHINA - 中文开源技术交流社区...

    这道题可以看为排列数的一个典型模块 一.算法实现题: 1.问题描述: 羽毛球队有男女运动员各n人,给定2个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q ...

  3. php面试题 优信二手车_分布式定时任务对比 - sharedCode的个人空间 - OSCHINA - 中文开源技术交流社区...

    分布式定时任务 1. 什么是分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式.叫做分布式定时任务. 2. 常见开源方案 elastic ...

  4. java大魔王,Java编码规范 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...

    命名 类名使用UpperCamelCase风格. 领域模型相关命名:DO / DTO / VO / DAO等. 方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase风格. 常量名全 ...

  5. java开源笔记软件下载_开发常用软件笔记 - ZhaoQian's Blog - OSCHINA - 中文开源技术交流社区...

    notepad++ 使用快捷键Ctrl+H打开"替换对话框",在每行的开头添加内容. 勾选左下角的"正则表达式"选项 在"查找目标"里输入上 ...

  6. 简易售货机JAVA sql_自动售货机 - 笨拙的小Q的个人空间 - OSCHINA - 中文开源技术交流社区...

    import java.util.Scanner; /** * 华为机试 自动售货机 * 不知道对错 * @author qxl * */ public class Shop { public sta ...

  7. java绘制统计直方图取平均_统计学——直方图解析 - osc_lv8qb16y的个人空间 - OSCHINA - 中文开源技术交流社区...

    直方图(Histogram),又称质量分布图,是一种统计报告图, 由一系列高度不等的纵向条纹或线段表示数据分布的情况. 一般用 横轴表示数据类型,纵轴表示分布情况. 直方图是数值数据分布的精确图形表示 ...

  8. java 投票算法_摩尔投票算法 - woshixin的个人空间 - OSCHINA - 中文开源技术交流社区...

    摩尔投票算法(Moore majority vote algorithm) 这个在wiki的介绍在https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_m ...

  9. java遮罩层_页面遮罩层 - javaalex的个人空间 - OSCHINA - 中文开源技术交流社区

    一. 基于ajax请求的遮罩层: $.ajax({ type:'POST', url:url, data:obj, dataType:'json', beforeSend: function () { ...

最新文章

  1. canvas arcTo()用法详解 – CodePlayer
  2. Python面试中需要注意的几点事项!
  3. 任务31:课时介绍 任务32:Cookie-based认证介绍 任务33:34课 :AccountController复制过来没有移除[Authorize]标签...
  4. 用计算机处理信息教学反思,《人工智能处理信息》教学反思
  5. 数据库:MySQL和MariaDB的JDBC连接
  6. php stmp 授权码问题,PHPmailer 使用网易126发送邮件的问题
  7. 特征缩放的效果:从词袋到 TF-IDF
  8. java调用app接口代码_java servlet手机app访问接口(二)短信验证
  9. vue子组件触发祖先元素的执行的方法
  10. 暴风集团:冯鑫因涉嫌对非国家工作人员行贿被公安机关拘留
  11. android ios 混合编程,React Native与原生(Android、iOS)混编,三端痛点解析
  12. tablesorter,jquery
  13. ip地址、域名、DNS、URL(即网址)的区别与联系
  14. vue实现增删改查功能
  15. IE8无法取得客户端完整路径的解决办法
  16. android微信红包提醒,微信红包提醒怎么设置 微信红包提醒设置教程
  17. 经典软件体系结构风格(一)
  18. Power Query零基础入门(Excel2021专业加强版)
  19. 乘飞机选座位的胡思乱想
  20. mac升级php后旧版本还在,老版本mac如何升级系统

热门文章

  1. uniapp引用iconfont图标
  2. 11.ARM架构的异常与中断
  3. (转)DCB文件格式解析
  4. Linux力挺微博世
  5. 快速排序的时间复杂度与空间复杂度
  6. Qt下使用vs编译的库文件
  7. 关于opencv fitLine直线拟合得斜率及截距
  8. 菜鸟学习 - Unity中的热更新 - Lua和C#通信
  9. linux 用谷歌浏览器总是崩溃,谷歌浏览器显示喔唷崩溃啦(谷歌浏览器经常崩溃怎么办)...
  10. R语言中的表达式函数