Boost.ASIO 是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库。已被推荐进入TR2,这意味着它有成为C++标准库的可能。
本文经作者同意于本站刊登
Boost.Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库.
1. 网络库:
VC2005注意
在 属性->C/C++->命令行 中加入
-DBOOST_REGEX_NO_LIB
来防止自动连接.
2. 同步Timer
本章介绍asio如何在定时器上进行阻塞等待(
blocking wait).
实现,我们包含必要的头文件.
所有的asio类可以简单的通过
include "asio.hpp"来调用.
- #include <iostream>
- #include <boost/asio.hpp>
#include <iostream>
#include <boost/asio.hpp>
此外,这个示例用到了
timer,我们还要包含
Boost.Date_Time的头文件来控制时间.
- #include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
使用asio至少需要一个
boost::asio::io_service对象.该类提供了访问I/O的功能.我们首先在main函数中声明它.
- int main()
- {
- boost::asio::io_service io;
int main()
{
boost::asio::io_service io;
下一步我们声明
boost::asio::deadline_timer对象.这个asio的核心类提供I/O的功能(这里更确切的说是定时功能),总是把一个
io_service对象作为他的第一个构造函数,而第二个构造函数的参数设定timer会在5秒后到时(expired).
- boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
这个简单的示例中我们演示了定时器上的一个阻塞等待.就是说,调用
boost::asio::deadline_timer::wait()的在创建后5秒内(注意:不是等待开始后),timer到时之前不会返回任何值.
一个
deadline_timer只有两种状态:
到时,
未到时.
如果
boost::asio::deadline_timer::wait()在到时的timer对象上调用,会立即return.
最后,我们输出理所当然的"Hello, world!"来演示timer到时了.
- std::cout << "Hello, world! ";
-
return 0;
- }
std::cout << "Hello, world!
";
return 0;
}
完整的代码:
- #include <iostream>
- #include <boost/asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
-
int main()
- {
- boost::asio::io_service io;
- boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.wait();
-
std::cout << "Hello, world! ";
-
return 0;
- }
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!
";
return 0;
}
3. 异步Timer
- #include <iostream>
- #include <asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
asio的异步函数会在一个异步操作完成后被回调.这里我们定义了一个将被回调的函数.
- void print(const asio::error&
)
- {
-
std::cout << "Hello, world! ";
- }
-
int main()
- {
- asio::io_service io;
- asio::deadline_timer t(io, boost::posix_time::seconds(5));
void print(const asio::error& /*e*/)
{
std::cout << "Hello, world!
";
}
int main()
{
asio::io_service io;
asio::deadline_timer t(io, boost::posix_time::seconds(5));
这里我们调用
asio::deadline_timer::async_wait()来异步等待
最后,我们必须调用
asio::io_service::run().
asio库只会调用那个正在运行的
asio::io_service::run()的回调函数.
如果
asio::io_service::run()不被调用,那么回调永远不会发生.
asio::io_service::run()会持续工作到点,这里就是timer到时,回调完成.
别忘了在调用
asio::io_service::run()之前设置好io_service的任务.比如,这里,如果我们忘记先调用
asio::deadline_timer::async_wait()则
asio::io_service::run()会在瞬间return.
完整的代码:
- #include <iostream>
- #include <asio.hpp>
- #include <boost/date_time/posix_time/posix_time.hpp>
-
void print(const asio::error&
)
- {
-
std::cout << "Hello, world! ";
- }
-
int main()
- {
- asio::io_service io;
-
asio::deadline_timer t(io, boost::posix_time::seconds(5));
- t.async_wait(print);
- io.run();
-
return 0;
- }
分享到:
相关推荐
Asio 是一个跨平台的 C++ 库,常用于网络编程、底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2 使用 Asio 2.1 下载 Asio 库分为 Boost 版和 non-Boost 版,后者的下载地址为: http://think-async.com/ ...
Boost.Asio C++ 网络编程 PDF 高清 非扫描 中文版
P2464 draws a number of inaccurate conclusions about the asynchronous model described in the Networking TS (“Asio/Net.TS”) and how it relates to P2300 Sender/Receiver (“P2300”). To assist readers ...
C++网络编程 - Boost::asio异步网络编程 - 01- boost库源码编译安装-附件资源
c++ boost asio网络库 异步tcp方式传文件 速度在10M左右.zip
boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...
http://blog.csdn.net/csnd_ayo/article/details/61577634 文章讲解的操作源码
而 C++ 经过了几十年的发展, 拥有庞大的工具链. 不管是动态分析还是静态分析都有大量的工具, 能极大的帮助程序员减少错误. c++得益于精良的设计,严格的检查,越是大型的工程,越是能降低开发成本。 但这并不意味着...
库的一部分,你只需要额外添加几个 #include 文件即可转换到 Boost.Asio。 可以在 http://www.packtpub.com 注册帐号,然后下载书籍的全部 示例代码。同时,也可以通过访问 http://www.packtpub.com/support 进行...
利用Boost::Asio库来实现Post/Get请求的发送。可以快速开发c++的http请求,访问以http为协议的服务器示例代码。
简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。 关于网络处理已经有很多解决方案,但是Boost.Asio是目前为止最优的方案。它在2005年就被包含进Boost,然后被大量Boost的...
简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。 计算机网络的设计方式有很多种,但是Boost.Asio的的方式远远优于其它的设计方式。它在2005年就被包含进Boost,然后被大量...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
asio是用于网络和底层I / O编程的跨平台C ++库,它使用现代C ++方法为开发人员提供一致的异步模型。
Chaos是一个基于Linux平台, reactor模式的网络事件库, 目前仅支持TCP传输协议, 仅在x86_64下编译, 并遵循3-clause BSD开源协议. 在使用上, 可以说它很像boost asio, 可能是由于我对boost asio的接口设计很有爱吧, ...
不一下子应用MFC等界面,以直观易懂的控制台程序展现网络编程“服务端”-“客户端”是怎么运行的。最适合初学者。
在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C ++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位...
boost::asio库是一个跨平台的网络编程库,它可用于各种操作系统(如Windows、Linux、Mac OS X等),并支持各种编译器(如GCC、Clang、Visual C++等)。它提供了一组基于事件驱动的API,包括异步I/O、套接字、定时器...
这篇文章主要介绍了C++ boost::asio编程-同步TCP详解及实例代码的相关...boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。