boost::asio 学习草稿
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio/
可以多个线程拥有io_service service; service.run();
但是不能一个线程运行多个service.run();
Boost.Asio c++ 网络编程翻译(1)
http://blog.csdn.net/mmoaay/article/details/39371939
// Server.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>
#include <windows.h> using namespace boost::asio; const size_t defaultLoopTime = 10000;
const size_t defaultSendLength = 1024 * 10 * 50;
const short int defaultPort = 8001; /**************************************************************
技术博客
http://www.cnblogs.com/itdef/ 技术交流群
群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/ int main()
{
io_service service;
ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(), defaultPort)); boost::shared_ptr<char> msgPtr(new char[defaultSendLength]);
for (size_t i = 0; i < defaultSendLength; i++)
{
msgPtr.get()[i] = "0123456789abcdef"[i % 16];
}
ip::tcp::socket sock(service);
acceptor.accept(sock); try {
for (int i = 0; i < defaultLoopTime; i++)
{
boost::system::error_code ec;
size_t bytes = write(sock, buffer(msgPtr.get(), defaultSendLength), ec);
assert(bytes == defaultSendLength);
if (ec == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (ec)
throw boost::system::system_error(ec); // Some other error.
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
} system("pause");
return 0;
}
// Client.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/thread.hpp>
#include <iostream> #include <windows.h> /**************************************************************
技术博客
http://www.cnblogs.com/itdef/ 技术交流群
群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
**************************************************************/ using namespace boost::asio;
using namespace std; const size_t defaultLoopTime = 10000;
const size_t defaultSendLength = 1024 * 10 * 50;
const short int defaultPort = 8001; int main()
{
io_service service;
ip::tcp::endpoint ep(ip::address::from_string("192.168.3.79"), defaultPort);
ip::tcp::socket sock(service);
sock.connect(ep);
time_t timer1;
time(&timer1); try {
for (size_t i = 0; i < defaultLoopTime; i++)
{
boost::shared_ptr<char> msgPtr(new char[defaultSendLength]);
boost::system::error_code ec;
size_t bytes = read(sock, buffer(msgPtr.get(), defaultSendLength), ec);
assert(bytes == defaultSendLength);
if (ec == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (ec)
throw boost::system::system_error(ec); // Some other error.
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
return -1;
} time_t timer2;
time(&timer2);
double elapsed = difftime(timer2, timer1);
std::cout << "time elapsed: "<< elapsed << "seconds." << std::endl;
double total_mb = 1.0 * defaultSendLength*defaultLoopTime / 1024 / 1024; std::cout << total_mb/ elapsed << "Mb/s." << std::endl; system("pause");
return 0;
}
boost::asio 学习草稿的更多相关文章
- boost asio 学习(一)io_service的基础
原文 http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio/ 编译环境 b ...
- boost asio 学习(九) boost::asio 网络封装
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...
- boost asio 学习(八) 网络基础 二进制写发送和接收
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=9 8. Net ...
- boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...
- boost asio 学习(六) 定时器
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=7 6 定时器 ...
- BOOST ASIO 学习专贴
本文已于20170903更新完毕,所有boost asio 代码均为本人手抄.编译器为vs2013,并且所有代码已经上传,本文下方可下载源码 为了学习boost asio库,我是从boost的官方bo ...
- boost::asio 学习
安装 下载-解压 指定安装目录 ./bootstrap.sh --prefix=/usr/local/boost_1_68_0 查看所有必须要编译才能使用的库 ./b2 --show-librarie ...
- boost asio 学习(五) 错误处理
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...
- boost asio 学习(四)使用strand将任务排序
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=5 4. Seri ...
随机推荐
- 使用SharedPreferences存储数据
SharedPreferences把数据保存在指定名称的XML文件中,文件地址在/data/data/包名/Shared_Prefs/文件夹中,具体是通过map形式保存. 保存数据: SharedPr ...
- sbt的安装测试
1.下载 wget https://github.com/sbt/sbt/releases/download/v0.13.15/sbt-0.13.15.tgz 2.安装 tar -zxvf sbt-0 ...
- Ubuntu jdk 8 与 6 切换 (安装与配置)
Switch To Oracle JDK8 Switch To Oracle JDK8 1.1 Switch Oracle JDK in the Unbuntu 14.04 Step1 : Downl ...
- menu 一组 只能选择一个
menu 一组 只能选择一个 将属性表的 groupindex 给一个值,假设你有三个Lang选项 就把这三个 manuitemex.groupindex 都设成同一个编号 (ex: 10) 以及把 ...
- webstorm使用
1. 打开toolbar 2. 安装vue.js 3. 设置new vue file模板 <template> <div> <header-component/> ...
- as3 string split方法一些注意
split () 方法 AS3 function split(delimiter:*, limit:Number = 0x7fffffff):Array 如果指定 limit 参数,返回的数组中具有的 ...
- python 在内存中处理tar.bz2文件
如果tar.bz2文件是通过网络进行下载,那么可以直接在内存进行解压后读取文件内容,不用将文件缓存到本地然后解压再进行读取,可以节省IO. 处理经过gzip压缩的tar文件的方法见:https://s ...
- java列表转成 int[] 的格式
java 稀疏矩阵中输入的索引系列和对应的值系列需要用 int[] r_indices = new int[featureIdxList.size()]; 的数据格式. 但是实际中可能实现没法确定 f ...
- 《Blue Flke》第一次作业:团队亮相
1.队名:Blue Flke 团队格言:决心是成功的力量,耐心是成功的保障. 2.团队成员组成: 201571030129/ 王胜海 (组长) 201571030126/ 妥志福 20157103 ...
- jQuery源码解读三选择器
直接上jQuery源码截取代码 // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ i ...