Boost.Asio教程 0

Boost.Asio是一个用于网络和底层 I/O 编程事的跨平台 c + + 库,为开发人员提供一种一致的使用现代的 c + + 方法的异步模型。

概述
在 Boost.Asio,加上基本原理和设计信息中所包含的功能的概述。
使用 Boost.Asio
如何在您的应用程序中使用 Boost.Asio。包括在库依赖项和受支持的平台上的信息。
教程
介绍了使用 Boost.Asio,所需的基本概念和演示如何使用 Boost.Asio 来开发简单的客户端和服务器程序的教程。
例子
说明 Boost.Asio 在更复杂的应用程序中使用的例子。
引用
详细的类和函数参考。
修订历史记录
Boost.Asio 所做的更改在每个的 Boost 发行版中的日志。
索引
书式文本索引的 Boost.Asio 文件。

使用 Boost.Asio

支持的平台
下面的平台和编译器进行了测试︰

Win32 和 Win64 使用 Visual c + + 7.1 和 Visual c + + 8.0。
Win32 使用 MinGW。
Win32 使用 Cygwin。(必须定义__USE_W32_SOCKETS )。
Linux (2.4 或 2.6 内核) 使用 g + + 3.3 或更高版本。
Solaris 使用 g + + 3.3 或更高版本。
Mac OS X 10.4 使用 g + + 3.3 或更高版本。
以下平台也可以工作︰

使用 C/c + + XL v9 的 AIX 5.3。
中的 HP-UX 11i v3 使用修补 + aC + A.06.14。
QNX 中微子 6.3 使用 g + + 3.3 或更高版本。
Solaris 使用太阳工作室 11 或更高版本。
使用 c + + 康柏 v7.1 Tru64 v5.1。
Win32 使用 Borland c + + 5.9.2
依赖项
以下库必须是可用以链接使用 Boost.Asio 的程序︰

boost::system::error_code和boost::system::system_error类的的 Boost.System。
Boost.Regex (可选) 如果您使用任何read_until()或async_read_until()重载,采取boost::regex参数。
OpenSSL(可选) 如果您使用 Boost.Asio 的 SSL 支持。
此外,一些例子也需要的 Boost.Thread、 Boost.Date_Time 或 Boost.Serialization 的库。

[Note] 注意
MSVC 或 Borland c + + 与你可能想要添加-DBOOST_DATE_TIME_NO_LIB和-DBOOST_REGEX_NO_LIB向您的项目设置以禁用自动链接 Boost.Date_Time 和 Boost.Regex 库分别。另外,你可以选择生成这些库并将链接到它们。

建筑的 Boost 库
你可以建立需要使用 Boost.Asio 的 Boost 库的子集并通过运行下面的命令从根提振其例子下载包︰

bjam --with-system --with-thread --with-date_time --with-regex --with-serialization stage
这是假设你已经建立了bjam。有关更多详细信息,请参阅 Boost.Build 文档。

可选的单独编译
默认情况下,Boost.Asio 是一个需要包含头文件的库。然而,一些开发商可能更愿意建立 Boost.Asio 使用单独的编译后的源代码。若要执行此操作,请添加#include <boost/asio/impl/src.hpp>对程序中的一个 (且只有一个) 源代码文件,然后生成程序与BOOST_ASIO_SEPARATE_COMPILATION项目/编译器设置中定义。或者,可以定义BOOST_ASIO_DYN_LINK打造单独编译的 Boost.Asio 作为共享库的一部分。

如果使用 Boost.Asio 的 SSL 支持,你还需要添加#include <boost/asio/ssl/impl/src.hpp>.


在下表中列出的宏可能用于控制 Boost.Asio 的行为。

宏观

描述

BOOST_ASIO_ENABLE_BUFFER_DEBUGGING

使 Boost.Asio 的缓冲区调试支持,可以帮助识别时无效的缓冲区用于读取或写入操作 (例如如果正在编写一个 std::string 对象被摧毁之前写入操作完成)。

当使用 Microsoft Visual c + +,该宏会自动定义如果启用了调试支持的编译器的迭代器,除非已定义了BOOST_ASIO_DISABLE_BUFFER_DEBUGGING 。

如果启用了标准库调试时使用 g + +,自动定义这个宏 (_GLIBCXX_DEBUG定义),除非已定义了BOOST_ASIO_DISABLE_BUFFER_DEBUGGING 。

BOOST_ASIO_DISABLE_BUFFER_DEBUGGING

显式禁用调试支持的 Boost.Asio 的缓冲区。

BOOST_ASIO_DISABLE_DEV_POLL

显式禁用/dev/poll支持在 Solaris 中,强制使用的select— — 基于实现。

BOOST_ASIO_DISABLE_EPOLL

显式禁用epoll支持在 Linux 中,强制使用的select— — 基于实现。

BOOST_ASIO_DISABLE_EVENTFD

显式用eventfd支持 Linux,迫使管中断阻止 epoll 方面/选择系统调用的使用上。

BOOST_ASIO_DISABLE_KQUEUE

显式禁用kqueue支持在 Mac OS X 和 BSD 的变种,强制使用的select— — 基于实现。

BOOST_ASIO_DISABLE_IOCP

显式禁用 Windows,迫使的select使用 I/O 完成端口支持-基础实施。

BOOST_ASIO_DISABLE_THREADS

显式禁用 Boost.Asio 线程支持,独立的提升作为一个整体支持线程。

BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN

默认情况下,Boost.Asio 将自动定义WIN32_LEAN_AND_MEAN ,Windows,尽量减少 Windows SDK 头文件和包含的特征数目进行编译时。BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN的存在可以防止WIN32_LEAN_AND_MEAN被定义。

BOOST_ASIO_NO_NOMINMAX

默认情况下,Boost.Asio 将自动定义NOMINMAX为窗口,以抑制min()和max()宏的定义编译时。BOOST_ASIO_NO_NOMINMAX的存在可以防止NOMINMAX被定义。

BOOST_ASIO_NO_DEFAULT_LINKED_LIBS

在编译时为 Windows 使用 Microsoft Visual c + + 或 Borland c + +,Boost.Asio 将自动链接中所需的 Windows SDK 程序库 (即ws2_32.lib和mswsock.lib或ws2.lib当生成 Windows CE) 的套接字支持。BOOST_ASIO_NO_DEFAULT_LINKED_LIBS宏可以防止这些库被联系在一起。

BOOST_ASIO_SOCKET_STREAMBUF_MAX_ARITY

确定可能传递给basic_socket_streambuf类模板connect成员函数的参数的最大数目。默认值为 5。

BOOST_ASIO_SOCKET_IOSTREAM_MAX_ARITY

确定可能传递给basic_socket_iostream类模板构造函数和connect成员函数的参数的最大数目。默认值为 5。

BOOST_ASIO_ENABLE_CANCELIO

使用户能够使用较早版本的 Windows CancelIo函数。如果未启用,对上一个套接字对象cancel()的调用将始终失败与asio::error::operation_not_supported在 Windows XP、 Windows Server 2003 和早期版本的 Windows 上运行时。当总是使用运行在 Windows Vista,Windows Server 2008,和以后, CancelIoEx函数上。

CancelIo函数具有使其使用之前,应考虑的两个问题︰

* 它只将取消了当前线程中启动的异步操作
* 它可以显示完成没有错误,但是要取消未完成的操作的请求可能会忽略由操作系统。它是否工作似乎取决于安装的驱动程序。
便携式的取消,请考虑使用以下替代方法之一︰
* 通过定义 BOOST_ASIO_DISABLE_IOCP 禁用澳洲的 I/O 完成端口后端。
* 使用套接字对象的 close () 函数来同时取消未完成的操作并关闭套接字。

BOOST_ASIO_NO_TYPEID

禁用在 Boost.Asiotypeid运算符的用法。如果BOOST_NO_TYPEID被定义,定义自动。

BOOST_ASIO_HASH_MAP_BUCKETS

确定 Boost.Asio 的内部hash_map对象中存储桶的数目。值应为质数,升序排列的用逗号分隔列表。hash_map执行会自动增加作为地图增加中的元素数的存储桶的数目。

一些例子︰
* 定义BOOST_ASIO_HASH_MAP_BUCKETS到1021意味着hash_map对象将始终包含 1021 水桶,不论在映射中的元素的数目。
* 定义BOOST_ASIO_HASH_MAP_BUCKETS到53,389,1543意味着hash_map对象将最初包含 53 桶。存储桶的数目将增至 389,然后 1543年向地图添加元素。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Boost.Asio是一个开源的跨平台网络编程库,它可以用于构建高效的异步I/O应用程序。以下是一些关于Boost.Asio的学习资源: 1. Boost.Asio官方文档:Boost.Asio的官方文档提供了详细的介绍和使用指南,包括教程、参考文档和示例代码。文档链接:https://www.boost.org/doc/libs/1_77_0/doc/html/boost_asio.html。 2. Boost.Asio学习指南:这是一篇由Boost.Asio的核心开发者编写的学习指南,它介绍了Boost.Asio的基本概念和使用方法,并提供了一些示例代码。指南链接:https://think-async.com/Asio/asio-1.18.1/doc/asio/overview/core.html。 3. Boost.Asio教程:这是一系列由Boost.Asio社区成员编写的教程,涵盖了从基础到高级的内容。教程链接:https://github.com/chriskohlhoff/asio/tree/master/asio/doc/tutorial。 4. Boost.Asio实战:这是一本关于使用Boost.Asio构建网络应用的书籍,它详细介绍了Boost.Asio的使用方法和实践经验,并提供了大量示例代码。书籍链接:https://www.oreilly.com/library/view/boostasio-c/9781785283079/。 希望这些资源能够帮助您学习和掌握Boost.Asio。 ### 回答2: boost.asio是一个基于C++的网络编程库,为开发人员提供了一套强大而灵活的工具来实现异步网络通信。 该库的教程涵盖了boost.asio的核心概念、基本用法和高级功能。首先,教程介绍了异步编程的概念,以及为什么应该使用异步编程来处理网络通信。然后,它讲解了boost.asio的核心组件,例如IoService、Socket和Buffer,以及如何使用它们进行网络连接和数据传输。 教程还会指导开发人员如何使用boost.asio处理不同类型的网络协议,例如TCP/IP和UDP。开发人员将学习如何创建服务器和客户端,并使用boost.asio的异步操作来处理连接和数据传输。教程还会介绍一些常见的网络编程任务,例如并发服务器和多线程编程,以及如何使用boost.asio来解决这些问题。 除了基本内容外,教程还涵盖了boost.asio的高级功能,例如SSL加密、定时器和信号处理。开发人员将学习如何使用SSL加密来保护网络通信,以及如何使用定时器来处理超时和延迟。此外,教程还会介绍如何使用信号处理来处理中断和异常情况。 总的来说,boost.asio教程为开发人员提供了一个全面的参考资料,帮助他们掌握这个强大的网络编程库。无论是初学者还是有经验的开发人员,都可以从中学习到如何使用boost.asio来构建高效可靠的网络应用程序。 ### 回答3: boost.asio是一个用于异步I/O操作的C++库。它提供了一个面向对象的接口,可以用于处理网络编程、文件I/O和串口通信等操作。boost.asio的设计目标是高效和可扩展性。 boost.asio教程是一个系统介绍boost.asio库的学习材料。该教程通常包含以下内容: 1. 引言:介绍boost.asio库的作用和特性。解释为什么选择boost.asio而不是其他库。 2. 环境配置:指导读者如何安装和配置boost.asio库。包括下载和安装boost库、配置编译器和连接器等步骤。 3. 基本概念:介绍boost.asio库的基本概念和术语。例如,异步操作、回调函数、handler等。 4. 网络编程:教授如何使用boost.asio库进行网络编程。包括创建Socket对象、建立连接、发送和接收数据等操作。 5. 文件I/O:介绍如何使用boost.asio库进行文件读写操作。教授如何打开文件、读取和写入数据等。 6. 串口通信:介绍如何使用boost.asio库进行串口通信。教授如何打开串口、发送和接收数据等。 7. 高级主题:介绍一些高级主题,例如多线程编程、定时器、SSL加密等。这些主题可以帮助读者更深入地理解和使用boost.asio库。 通过学习boost.asio教程,读者可以学会使用boost.asio库进行异步I/O操作。他们可以编写高性能的网络应用程序、文件处理程序和串口通信程序。同时,他们还能够了解到一些高级主题,从而扩展他们的技能和知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值