# if
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <iostream> void handler1(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
} void handler2(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
} boost::asio::io_service io_service; void run()
{
io_service.run();
} /*
两个线程调用run运行同一个服务,当第一服务在阻塞时,可以再第二个线程里面执行
但这样会使得使用std::cout混乱,开线程要注意,开过多的线程是没有意义的
*/ int main()
{
boost::asio::deadline_timer timer1(io_service, boost::posix_time::seconds());
timer1.async_wait(handler1);
boost::asio::deadline_timer timer2(io_service, boost::posix_time::seconds());
timer2.async_wait(handler2);
boost::thread thread1(run);
boost::thread thread2(run);
thread1.join();
thread2.join();
}
#endif #if 0 #include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <iostream> void handler1(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
} void handler2(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
} boost::asio::io_service io_service1;
boost::asio::io_service io_service2; void run1()
{
io_service1.run();
} void run2()
{
io_service2.run();
} /*
第二种方法不是多个线程运行同一个服务,而是创建多个服务,每个服务用同一个线程,如果线程数与内核数相同,在一个核上面不回出现竞争现象
*/
int main()
{
boost::asio::deadline_timer timer1(io_service1, boost::posix_time::seconds());
timer1.async_wait(handler1);
boost::asio::deadline_timer timer2(io_service2, boost::posix_time::seconds());
timer2.async_wait(handler2);
boost::thread thread1(run1);
boost::thread thread2(run2);
thread1.join();
thread2.join();
} #endif //简单客户端请求
#if 0 #include <boost/asio.hpp>
#include <boost/array.hpp>
#include <iostream>
#include <string> boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::socket sock(io_service);
boost::array<char, > buffer; /**
*@brief 读回调,当读完时read_handler内部产生错误,不回循环调用了
*/
void read_handler(const boost::system::error_code& ec, std::size_t bytes_transferred)
{
if (!ec)
{
std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
//必须的,因为可能包没接完,和read_handler交替运行
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
} void connect_handler(const boost::system::error_code& ec)
{
if (!ec)
{
//发送http请求,
boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: highscore.de\r\n\r\n"));
//启动数据的接收,接收数据保存在buffer中,回调read_handler
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
} /**
*@brief 域名解析回调
*@param it 解析后地址
*/
void resolver_handler(const boost::system::error_code& ec, boost::asio::ip::tcp::resolver::iterator it)
{
if (!ec)
{
//访问IO对象sock,建立连接
sock.async_connect(*it, connect_handler);
}
} int main()
{
boost::asio::ip::tcp::resolver::query query("www.highscore.de", "");//新建一个查询,域名为...,端口为80
resolver.async_resolve(query, resolver_handler);//解析域名为ip
io_service.run();//将控制权交给操作系统进行异步操作
getchar();
}
#endif //简单的服务器接收例子
#if 0
#include <boost/asio.hpp>
#include <string> boost::asio::io_service io_service;
//接收端口配置,从80端口等待v4类型的ip
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), );
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
boost::asio::ip::tcp::socket sock(io_service);
std::string data = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!"; void write_handler(const boost::system::error_code& ec, std::size_t bytes_transferred)
{ } void accept_handler(const boost::system::error_code& ec)
{
if (!ec)
{
//async_write_some函数也能发送数据,但这个函数只要发送一个字节就会回调函数,
//因为将整个数据发送完毕异步操作才算完毕,async_write函数在发送完毕调用write_handler
//这个和libevent机制差不多
boost::asio::async_write(sock, boost::asio::buffer(data), write_handler);
}
} int main()
{
acceptor.listen();//监听,将接收器配置成接收状态
acceptor.async_accept(sock, accept_handler);//等待接收
io_service.run();
} #endif

学习boost::asio一些小例子的更多相关文章

  1. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

  2. boost::asio 同步&异步例子

    同步客户端: using boost::asio; io_service service; ip::tcp::endpoint ep( ip::address::from_string(); ip:: ...

  3. 学习Boost/Asio

    编译boost 在Mac下使用brew编译boost,为了使用C++11,需要加入参数–c++11 $ brew install boost --c++11 在我的Mac虚拟机里面用了20分钟左右编译 ...

  4. Java 正则表达式学习总结和一些小例子

    从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...

  5. Python学习一、一个小例子

    一.题目: 对于一串氨基酸序列(由字母表前二十个大写字母组成),需要得到每一个氨基酸数目,然后输出到文件夹D:\test\frq.txt,要求用循环和字典实现. 氨基酸序列如下: ABCDEFGHIJ ...

  6. Python学习中的一些小例子

    这篇文章包括用Python编写的斐波那契数列,三位数的水仙花数和百钱买百鸡的基础代码 斐波那契数列: ''' def hanshu(n): n_1 = 1 n_2 = 1 m = n sumn = 0 ...

  7. 【Pthon入门学习】多级菜单小例子

    menu_list = { '北京':{ '昌平':{ '回龙观':{ '和谐家园':{}, '矩阵小区':{}, '北店家园':{} }, '沙河':{ '北街家园1区':{}, '北街家园2区': ...

  8. 大数据学习——scala的wordCount小例子

    val lines=List("hello tom hello jerry","hello tom hello kitty hello china") //方法 ...

  9. Python 基础学习的几个小例子

    最近在研究动态脚本语言 Python , 出于对其语言精简度的喜欢及大学时期对 matlab 这样的数学领域语言的怀念, 再加上笔者是C++起家,Python中所涉及的del机制与特殊方法重载(类比于 ...

随机推荐

  1. Java Executor框架

    java.util.concurrent 包中包含灵活的线程池实现,但是更重要的是,它包含用于管理实现 Runnable 的任务的执行的整个框架,该框架称为 Executor 框架.该框架基于生产者- ...

  2. hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇

    照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放: package com.joe.entity; import java.util.Map; publi ...

  3. Spine U3D整合流程问题

    Spine U3D整合流程问题 What: 公司2d项目开发,动画外包的spine.本来在spine里面一切正常,但是导入u3d运行库的时候动画切换的时候原来的动画是好的,一旦切换了就乱帧了. 如下结 ...

  4. C++中string.find()函数与string::npos

    先说说string::npos参数: npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西.取值由实现决定,一般是 ...

  5. 经典SQL语句使用方法大全

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  6. AIDL调用指南

    近期有需求要实现两个apk之间的通信,想到用AIDL来实现,现写一个demo学习下AIDL怎样使用. 这里我要实现一个apk(client端)调用还有一个apk(server端)的方法. 先实现ser ...

  7. 把sqlserver查询结果复制到Excel出现数据记录遗漏

    问题:今天在sqlserver查询,总共有10000记录,把结果复制到Excel,发现少掉352条,用导出csv也是如此. 原因:经排查发现缺少的记录是因为商品名称字段包含英文双引号". 解 ...

  8. Centos 删除用户

    # 查看用户 tail /etc/passwd # 删除用户 userdel -rf ftpuser1

  9. Android解决button反复点击问题

    public class BaseActivity extends Activity { protected boolean isDestroy; //防止反复点击设置的标志.涉及到点击打开其它Act ...

  10. Vivado 与 Modelsim 联合仿真

    1 编译库 用命令行 用vivado工具 vivado 有很多 IP核的接口 已经与 ISE的核 不太一样了,比如fir ,接口就是这样的: fir_lp fir_lp_ip(    .aclk  ( ...