0

0

c++怎么使用Boost.Asio库_c++异步网络库Boost.Asio使用入门

冰火之心

冰火之心

发布时间:2025-10-29 19:18:02

|

908人浏览过

|

来源于php中文网

原创

Boost.Asio 是基于 Boost 的 C++ 网络编程库,支持同步异步 I/O。1. 安装时只需包含头文件,部分功能需链接 boost_system。2. 同步客户端使用 io_context、resolver 和阻塞读写实现 TCP 通信。3. 异步服务器通过 io_context::run 启动事件循环,利用 lambda 回调和 shared_from_this 管理生命周期。4. 编译时指定 -I 包含路径和 -lboost_system 链接库。掌握基础后可扩展至定时器、UDP、SSL 等功能。

c++怎么使用boost.asio库_c++异步网络库boost.asio使用入门

Boost.Asio 是一个功能强大且广泛使用的 C++ 库,用于处理网络和低层 I/O 编程,支持同步和异步操作。它不仅适用于 TCP/UDP 通信,还能处理定时器、串口等。下面介绍如何快速上手使用 Boost.Asio 进行基本的网络编程。

安装与配置 Boost.Asio

Boost.Asio 是 Boost 库的一部分,但很多功能是头文件形式,无需单独编译。只需包含头文件即可使用。

1. 下载 Boost: 访问 boost.org 下载最新版本的 Boost。
2. 解压并设置路径: 将 Boost 解压到本地目录,并在项目中包含其头文件路径。
3. 使用方式: 大部分 Asio 功能是 header-only 的,只要 #include 对应头文件即可。若使用某些需要编译的功能(如协程),则需链接 boost_system 等库。

注意: 如果你使用的是 C++11 或更高版本,推荐使用 boost::asio,未来可平滑迁移到 std::asio(C++23 起纳入标准)。

同步 TCP 客户端示例

以下是一个简单的同步 TCP 客户端,连接到本地 8080 端口并发送请求:

立即学习C++免费学习笔记(深入)”;

#include <boost/asio.hpp>
#include <iostream>
<p>int main() {
boost::asio::io_context io;
boost::asio::ip::tcp::socket socket(io);
boost::asio::ip::tcp::resolver resolver(io);</p><pre class="brush:php;toolbar:false;">// 解析地址和端口
auto endpoints = resolver.resolve("localhost", "8080");

// 建立连接
boost::asio::connect(socket, endpoints);

// 发送数据
boost::asio::write(socket, boost::asio::buffer("GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"));

// 接收响应
char data[1024];
size_t len = socket.read_some(boost::asio::buffer(data));
std::cout.write(data, len) << std::endl;

return 0;

}

说明: 此代码使用 io_context 管理 I/O 上下文,通过 resolver 解析地址,connectread_some 都是阻塞调用。

异步 TCP 服务器基础

异步模式利用回调函数或协程实现非阻塞操作,适合高并发场景。下面是一个最简异步回显服务器:

PathFinder
PathFinder

AI驱动的销售漏斗分析工具

下载
#include <boost/asio.hpp>
#include <memory>
#include <iostream>
<p>using boost::asio::ip::tcp;</p><p>class session : public std::enable_shared_from<em>this<session> {
public:
session(tcp::socket socket) : socket</em>(std::move(socket)) {}</p><pre class="brush:php;toolbar:false;">void start() {
    do_read();
}

private: void doread() { socket.async_readsome( boost::asio::buffer(data), [self=shared_from_this()](boost::system::error_code ec, std::size_t length) { if (!ec) self->do_write(length); }); }

void do_write(std::size_t length) {
    boost::asio::async_write(
        socket_,
        boost::asio::buffer(data_, length),
        [self=shared_from_this()](boost::system::error_code ec, std::size_t /*length*/) {
            if (!ec)
                self->do_read();
        });
}

tcp::socket socket_;
char data_[1024];

};

class server { public: server(boost::asio::iocontext& io, short port) : acceptor(io, tcp::endpoint(tcp::v4(), port)) { do_accept(); }

private: void doaccept() { acceptor.async_accept( [this](boost::system::error_code ec, tcp::socket socket) { if (!ec) { std::make_sharedsession>(std::move(socket))->start(); } do_accept(); }); }

tcp::acceptor acceptor_;

};

int main() { try { boost::asio::io_context io; server s(io, 8080); io.run(); // 启动事件循环 } catch (std::exception& e) { std::cerr

关键点:
- 使用 io_context::run() 启动事件循环,处理所有异步操作。
- 异步操作通过 lambda 回调处理结果,避免阻塞主线程。
- 使用 shared_from_this 管理会话对象生命周期,防止在异步操作完成前被销毁。

编译与链接

在 Linux 或 macOS 上,使用 g++ 编译上述代码:

g++ -std=c++14 your_file.cpp -o server \
-I/path/to/boost \
-lboost_system

Windows 用户可使用 Visual Studio,将 Boost 头文件目录加入包含路径,并链接 boost_system.lib

基本上就这些。掌握同步读写、异步回调机制和 io_context 的运行方式后,就可以进一步学习定时器、SSL 支持、UDP 编程等高级功能。Boost.Asio 虽初看复杂,但结构清晰,一旦理解模型,开发高效网络程序并不难。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

336

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

776

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.10.25

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1031

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

612

2024.08.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

1

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号