java 网速测试_简易的网速测试 - 梦想游戏 - OSCHINA - 中文开源技术交流社区
基本原理是访问稳定的网页来测试速度,或者利用稳定的下载地址来测速,比如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 - 中文开源技术交流社区相关推荐
- emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...
1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...
- java运动员最佳配对_运动员最佳配对问题 - osc_y1pyjby5的个人空间 - OSCHINA - 中文开源技术交流社区...
这道题可以看为排列数的一个典型模块 一.算法实现题: 1.问题描述: 羽毛球队有男女运动员各n人,给定2个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q ...
- php面试题 优信二手车_分布式定时任务对比 - sharedCode的个人空间 - OSCHINA - 中文开源技术交流社区...
分布式定时任务 1. 什么是分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式.叫做分布式定时任务. 2. 常见开源方案 elastic ...
- java大魔王,Java编码规范 - 春哥大魔王的博客的个人空间 - OSCHINA - 中文开源技术交流社区...
命名 类名使用UpperCamelCase风格. 领域模型相关命名:DO / DTO / VO / DAO等. 方法名,参数名,成员变量,局部变量都统一使用lowerCamelCase风格. 常量名全 ...
- java开源笔记软件下载_开发常用软件笔记 - ZhaoQian's Blog - OSCHINA - 中文开源技术交流社区...
notepad++ 使用快捷键Ctrl+H打开"替换对话框",在每行的开头添加内容. 勾选左下角的"正则表达式"选项 在"查找目标"里输入上 ...
- 简易售货机JAVA sql_自动售货机 - 笨拙的小Q的个人空间 - OSCHINA - 中文开源技术交流社区...
import java.util.Scanner; /** * 华为机试 自动售货机 * 不知道对错 * @author qxl * */ public class Shop { public sta ...
- java绘制统计直方图取平均_统计学——直方图解析 - osc_lv8qb16y的个人空间 - OSCHINA - 中文开源技术交流社区...
直方图(Histogram),又称质量分布图,是一种统计报告图, 由一系列高度不等的纵向条纹或线段表示数据分布的情况. 一般用 横轴表示数据类型,纵轴表示分布情况. 直方图是数值数据分布的精确图形表示 ...
- java 投票算法_摩尔投票算法 - woshixin的个人空间 - OSCHINA - 中文开源技术交流社区...
摩尔投票算法(Moore majority vote algorithm) 这个在wiki的介绍在https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_m ...
- java遮罩层_页面遮罩层 - javaalex的个人空间 - OSCHINA - 中文开源技术交流社区
一. 基于ajax请求的遮罩层: $.ajax({ type:'POST', url:url, data:obj, dataType:'json', beforeSend: function () { ...
最新文章
- canvas arcTo()用法详解 – CodePlayer
- Python面试中需要注意的几点事项!
- 任务31:课时介绍 任务32:Cookie-based认证介绍 任务33:34课 :AccountController复制过来没有移除[Authorize]标签...
- 用计算机处理信息教学反思,《人工智能处理信息》教学反思
- 数据库:MySQL和MariaDB的JDBC连接
- php stmp 授权码问题,PHPmailer 使用网易126发送邮件的问题
- 特征缩放的效果:从词袋到 TF-IDF
- java调用app接口代码_java servlet手机app访问接口(二)短信验证
- vue子组件触发祖先元素的执行的方法
- 暴风集团:冯鑫因涉嫌对非国家工作人员行贿被公安机关拘留
- android ios 混合编程,React Native与原生(Android、iOS)混编,三端痛点解析
- tablesorter,jquery
- ip地址、域名、DNS、URL(即网址)的区别与联系
- vue实现增删改查功能
- IE8无法取得客户端完整路径的解决办法
- android微信红包提醒,微信红包提醒怎么设置 微信红包提醒设置教程
- 经典软件体系结构风格(一)
- Power Query零基础入门(Excel2021专业加强版)
- 乘飞机选座位的胡思乱想
- mac升级php后旧版本还在,老版本mac如何升级系统