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 ...
随机推荐
- linux系统下修改文件夹目录权限-chmod
Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名 ...
- OpenACC kernels
▶ 使用 kernels 导语并行化 for 循环 ● 一重循环 #include <stdio.h> #include <time.h> #include <opena ...
- Ceph实战入门系列(一)——三节点Ceph集群的安装与部署
安装文档:http://blog.csdn.net/u014139942/article/details/53639124
- 使用three.js开发3d地图初探
three是图形引擎,而web二维三维地图都是基于图形引擎的,所以拿three来开发需求简单的三维地图应用是没什么问题的. 1.坐标转换 实际地理坐标为经度.纬度.高度,而three.js使用的是右手 ...
- VisualSVN: 只能修改自己提交日志
上回讲过怎么修改日志信息,这次想提交怎么只能修改自己提交的. 现在演示用户111来修改libra的日志信息 这个公正的SVN出现了 用户111说小样,不让我改,那我修改自己提交的日志总行了吧!! 我改 ...
- maven项目--Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
转自:https://yq.aliyun.com/ziliao/597445 Eclipse中tomcat部署工程启动后报错: 二月 25, 2016 2:34:00 下午 org.apache.to ...
- php缓存类
<?php /* * 缓存类 cache * 实 例: include( "cache.php" ); $cache = new cache(30); $cache-> ...
- as3 air 获取文件夹下的所有文件
private function getFile(directory:File) { var files:Array = directory.getDirectoryListing(); for(va ...
- python中join()函数、list()函数补充的用法
---恢复内容开始--- Python join() 方法用于将序列中的元素(必须是str) 以指定的字符 连接生成一个新的字符串. list=[','a','b','c'] print(''.joi ...
- IExpress 制作安装包 注意事项
被打包的文件名不能超过8个字符,否则iexpress会取前6个字符 + "~1".