Boost.Asio教程 0

xiaoxiao2021-02-28  59

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年向地图添加元素。
转载请注明原文地址: https://www.6miu.com/read-74142.html

最新回复(0)