`
huozheleisi
  • 浏览: 1237774 次
文章分类
社区版块
存档分类
最新评论

C++ 网络库 -- ASIO

 
阅读更多
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"来调用.
  1. #include <iostream>
  2. #include <boost/asio.hpp>
#include <iostream>
#include <boost/asio.hpp>
此外,这个示例用到了timer,我们还要包含Boost.Date_Time的头文件来控制时间.
  1. #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函数中声明它.
  1. int main()
  2. {
  3. boost::asio::io_service io;
int main()
{
	boost::asio::io_service io;
下一步我们声明boost::asio::deadline_timer对象.这个asio的核心类提供I/O的功能(这里更确切的说是定时功能),总是把一个io_service对象作为他的第一个构造函数,而第二个构造函数的参数设定timer会在5秒后到时(expired).
  1. 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.
  1. t.wait();
t.wait();
最后,我们输出理所当然的"Hello, world!"来演示timer到时了.
  1. std::cout << "Hello, world! ";
  2. return 0;
  3. }
	std::cout << "Hello, world!
";
	return 0;
}

完整的代码:

  1. #include <iostream>
  2. #include <boost/asio.hpp>
  3. #include <boost/date_time/posix_time/posix_time.hpp>
  4. int main()
  5. {
  6. boost::asio::io_service io;
  7. boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  8. t.wait();
  9. std::cout << "Hello, world! ";
  10. return 0;
  11. }
#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

  1. #include <iostream>
  2. #include <asio.hpp>
  3. #include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
asio的异步函数会在一个异步操作完成后被回调.这里我们定义了一个将被回调的函数.
  1. void print(const asio::error& /*e*/)
  2. {
  3. std::cout << "Hello, world! ";
  4. }
  5. int main()
  6. {
  7. asio::io_service io;
  8. 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()来异步等待
  1. t.async_wait(print);
	t.async_wait(print);
最后,我们必须调用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.
  1. io.run();
  2. return 0;
  3. }
	io.run();
	return 0;
}

完整的代码:

  1. #include <iostream>
  2. #include <asio.hpp>
  3. #include <boost/date_time/posix_time/posix_time.hpp>
  4. void print(const asio::error& /*e*/)
  5. {
  6. std::cout << "Hello, world! ";
  7. }
  8. int main()
  9. {
  10. asio::io_service io;
  11. asio::deadline_timer t(io, boost::posix_time::seconds(5));
  12. t.async_wait(print);
  13. io.run();
  14. return 0;
  15. }
分享到:
评论

相关推荐

    C++ 之 Asio 库(全面解析)

    Asio 是一个跨平台的 C++ 库,常用于网络编程、底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2 使用 Asio 2.1 下载 Asio 库分为 Boost 版和 non-Boost 版,后者的下载地址为: http://think-async.com/ ...

    Boost.Asio C++ 网络编程 中文版

    Boost.Asio C++ 网络编程 PDF 高清 非扫描 中文版

    Asio作者介绍C++中的网络库Networking TS

    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异步网络编程 - 01- boost库源码编译安装-附件资源

    c++ boost asio网络库 异步tcp方式文件传输 速度在10M左右.zip

    c++ boost asio网络库 异步tcp方式传文件 速度在10M左右.zip

    C++ boost::asio编程-同步TCP详解及实例代码

    boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...

    C++ Boost Asio 网络库 讲解示例代码

    http://blog.csdn.net/csnd_ayo/article/details/61577634 文章讲解的操作源码

    c++ 网络库asio的优势

    而 C++ 经过了几十年的发展, 拥有庞大的工具链. 不管是动态分析还是静态分析都有大量的工具, 能极大的帮助程序员减少错误. c++得益于精良的设计,严格的检查,越是大型的工程,越是能降低开发成本。 但这并不意味着...

    boost-asio-cpp-network-programming-chinese 中文版共146页

    库的一部分,你只需要额外添加几个 #include 文件即可转换到 Boost.Asio。 可以在 http://www.packtpub.com 注册帐号,然后下载书籍的全部 示例代码。同时,也可以通过访问 http://www.packtpub.com/support 进行...

    c++ boost asio http get post请求

    利用Boost::Asio库来实现Post/Get请求的发送。可以快速开发c++的http请求,访问以http为协议的服务器示例代码。

    Boost.Asio Cpp Network Programming 中文版全部

    简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。 关于网络处理已经有很多解决方案,但是Boost.Asio是目前为止最优的方案。它在2005年就被包含进Boost,然后被大量Boost的...

    asio网络库类图分解.vsdx

    简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。 计算机网络的设计方式有很多种,但是Boost.Asio的的方式远远优于其它的设计方式。它在2005年就被包含进Boost,然后被大量...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    asio C++ library-开源

    asio是用于网络和底层I / O编程的跨平台C ++库,它使用现代C ++方法为开发人员提供一致的异步模型。

    一个开源的c++网络事件库

    Chaos是一个基于Linux平台, reactor模式的网络事件库, 目前仅支持TCP传输协议, 仅在x86_64下编译, 并遵循3-clause BSD开源协议. 在使用上, 可以说它很像boost asio, 可能是由于我对boost asio的接口设计很有爱吧, ...

    C++ BOOST::Asio库网络编程源代码

    不一下子应用MFC等界面,以直观易懂的控制台程序展现网络编程“服务端”-“客户端”是怎么运行的。最适合初学者。

    C++开源程序库 C++开源程序库

    在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C ++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位...

    在C++编程领域,有一段备受推崇的代码-“boost::asio”,它被认为是世界上最强大的C++代码之一

    boost::asio库是一个跨平台的网络编程库,它可用于各种操作系统(如Windows、Linux、Mac OS X等),并支持各种编译器(如GCC、Clang、Visual C++等)。它提供了一组基于事件驱动的API,包括异步I/O、套接字、定时器...

    C++ boost::asio编程 同步TCP详解及实例代码

    这篇文章主要介绍了C++ boost::asio编程-同步TCP详解及实例代码的相关...boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。

Global site tag (gtag.js) - Google Analytics