【C++】开源:Boost网络库Asio配置使用

😏★,° :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍Asio网络库配置使用。
无专精则不能成,无涉猎则不能通。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 项目介绍](#:smirk:1. 项目介绍)
    • [:blush:2. 环境配置](#:blush:2. 环境配置)
    • [:satisfied:3. 使用说明](#:satisfied:3. 使用说明)

😏1. 项目介绍

项目Github地址:https://github.com/boostorg/asio

Boost.Asio是一个用于网络和底层I/O编程的C++库,它提供了一种简洁而高效的方式来处理异步事件驱动的网络编程。Asio是"异步 I/O"的缩写。

下面是一些关于Boost.Asio的特点和功能的介绍:

1.异步模型:Boost.Asio使用异步编程模型,允许你以非阻塞的方式处理多个并发的I/O操作。这样可以提高程序的性能和响应能力。
2.跨平台性:Boost.Asio在不同操作系统上提供统一的API,使得你可以在多个平台上轻松开发和移植网络应用程序。
3.支持多种协议:Boost.Asio支持多种网络协议,包括TCP、UDP、SSL等,让你能够轻松地进行各种网络通信。
4.网络编程基础功能:Boost.Asio提供了一系列的类和函数,用于处理套接字、地址解析、定时器、缓冲区等常见的网络编程任务。
5.可扩展性:Boost.Asio提供了灵活的接口和设计,允许你根据需要对其进行扩展和定制,以满足特定的应用需求。
6.高性能:Boost.Asio通过使用异步I/O、事件驱动和零拷贝等技术,可以实现高效的网络编程,提供出色的性能。

Boost.Asio是一个功能强大而灵活的库,它被广泛应用于构建各种类型的网络应用程序,包括Web服务器、游戏服务器、实时通信系统等。它不仅提供了一种简单易用的方式来处理网络编程任务,还允许你利用C++的强大功能来开发高性能和可扩展的应用程序。

😊2. 环境配置

下面进行环境配置:

bash 复制代码
# apt安装
sudo apt-get install libboost-dev libasio-dev

😆3. 使用说明

下面进行使用分析:

TCP-Http客户端请求示例:

cpp 复制代码
#include <iostream>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main()
{
    try
    {
        boost::asio::io_context io_context;

        // 创建一个 TCP socket
        tcp::socket socket(io_context);

        // 连接到服务器
        tcp::resolver resolver(io_context);
        boost::asio::connect(socket, resolver.resolve("www.example.com", "http"));

        // 发送 HTTP 请求
        std::string request = "GET / HTTP/1.1\r\n"
                              "Host: www.example.com\r\n"
                              "Connection: close\r\n\r\n";
        boost::asio::write(socket, boost::asio::buffer(request));

        // 读取响应数据
        boost::asio::streambuf response;
        boost::asio::read_until(socket, response, "\r\n");

        // 打印响应数据
        std::istream response_stream(&response);
        std::string status_line;
        std::getline(response_stream, status_line);
        std::cout << "Response: " << status_line << std::endl;

        // 关闭连接
        socket.close();
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;
}

编译运行:

bash 复制代码
g++ -o main main.cpp -lboost_system -lpthread
Response: HTTP/1.1 200 OK

TCP服务端示例:

cpp 复制代码
#include <iostream>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main()
{
    try
    {
        boost::asio::io_context io_context;

        // 创建一个 TCP acceptor,监听指定端口
        tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 8080));

        // 等待并接受连接
        tcp::socket socket(io_context);
        acceptor.accept(socket);

        // 处理连接请求
        std::string message = "Hello, Boost.Asio!";
        boost::system::error_code ignored_error;
        boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
    }
    catch (std::exception& e)
    {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;
}

编译运行:

bash 复制代码
g++ -o server server.cpp -lboost_system -lpthread
./server

TCP客户端示例:

cpp 复制代码
#include <iostream>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

int main() {
  try {
    // 创建IO上下文对象
    boost::asio::io_context io_context;

    // 创建socket对象
    tcp::socket socket(io_context);

    // 解析服务器地址和端口
    tcp::resolver resolver(io_context);
    tcp::resolver::results_type endpoints = resolver.resolve("127.0.0.1", "8080");

    // 连接到服务器
    boost::asio::connect(socket, endpoints);

    // 发送数据给服务器
    std::string request = "Hello, server!";
    boost::asio::write(socket, boost::asio::buffer(request));

    // 接收服务器的响应
    char response[1024];
    size_t bytesRead = socket.read_some(boost::asio::buffer(response));

    // 显示服务器的响应
    std::cout << "Response from server: ";
    std::cout.write(response, bytesRead);
    std::cout << std::endl;

  } catch (std::exception& e) {
    std::cerr << "Exception: " << e.what() << std::endl;
  }

  return 0;
}

编译运行:

bash 复制代码
g++ -o client client.cpp -lboost_system -lpthread
./client
Response from server: Hello, Boost.Asio!

以上。

相关推荐
Hrain-AI14 分钟前
Anthropic oncall-kit 开源拆解:运维 Agent 落地范式的四基石与权限边界
运维·人工智能·开源
淼澄研学16 分钟前
Proliferate开源框架技术解析与Docker部署实操
docker·容器·开源
梦想的旅途219 分钟前
企业微信Webhook:自动回复为什么会连发
网络·安全·企业微信
wWYy.22 分钟前
C++与C的区别
c语言·c++
冬奇Lab1 小时前
开源项目第197期:skill-up — 阿里巴巴出品的 Agent Skills 评测与进化工具,评测闭环 + 自动修复
人工智能·开源·资讯
冬奇Lab1 小时前
Code Agent 解剖(10):agent 崩了怎么恢复,对话历史存在哪?
人工智能·开源·agent
SLD_Allen2 小时前
字节跳动飞连(Feilian)AI智能体零信任安全治理深度技术研究报告
网络·人工智能·安全·智能体安全
dong_junshuai3 小时前
每天一个开源项目#79 Apache Maka:3K星本地Agent工作台
开源·github·agent
文慧的科技江湖4 小时前
goEMS 能源管理系统(微电网) -;️goEMS微电网;能源管理系统(EMS);️储能光伏运营平台️; 多租户 SaaS 能源云平台️;
开源·能源·微电网·ems·新型电力系统·能源数字化·goems能源管理系统微电网
程序员与背包客_CoderZ4 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb