boost/asio的同步网络核心组件(完善中)


前言:你得了解一些基本网络常识 比如说socket编程的一些函数(c语言版)最佳 建议阅读
网络编程


boost:
boost::asio::buffer 是 Boost.Asio 库中用于创建缓冲区的辅助函数。它将 C++ 容器(如 std::vector、std::string)或原始数组转换为 Boost.Asio 的缓冲区类型,以便在读写操作中使用。

  • boost::asio::buffer(data)
    data 可以为:std::vector,std::string std::array 自定义缓冲区

tcp:: socket

功能概述

boost::asio::ip::tcp::socket 是一个用于 TCP 网络通信的套接字类,它封装了操作系统底层的套接字接口,提供了同步和异步的网络操作功能。它可以用于创建客户端或服务器端的 TCP 套接字,支持连接、发送和接收数据等操作

主要功能
  • 同步和异步操作:支持同步和异步的连接、读取和写入操作。
  • 连接管理:可以连接到指定的服务器端点,也可以监听并接受客户端的连接。
  • 错误处理:通过 boost::system::error_code 提供详细的错误信息。
  • 套接字选项:可以设置和获取套接字的各种选项
构造函数
  • boost::asio::ip::tcp::socket sock(io_context);
  • boost::asio::ip::tcp::socket(boost::asio::ip::tcp::socket&& other);:复制语义
主要类方法
  • connect
    客户端连接 socket
    socket.connect(endpoint)
  • read_some
    socket.read_some 是 Boost.Asio 中用于从套接字读取数据的同步函数。它会阻塞当前线程,直到读取到至少一个字节的数据或发生错误。这个函数非常适合用于读取流式数据,因为它会返回实际读取到的字节数。
    std::size_t read_some( const MutableBufferSequence& buffers,boost::system::error_code& ec);
    note :这个buffer 你得预存大小,要不然不能通过

参数
buffers:包含要读取数据的缓冲区序列。通常使用 boost::asio::buffer 函数创建。
ec:用于存储错误信息的 boost::system::error_code 对象。如果操作成功,ec 将被设置为 boost::system::error_code();如果发生错误,ec 将包含错误信息。

  • write_some
    boost::asio::ip::tcp::socket::write_some 是 Boost.Asio 中 tcp::socket 类的一个成员函数,用于将数据写入到套接字中。它是一个同步操作,会阻塞当前线程,直到至少一个字节的数据被写入或发生错误。
    std::size_t write_some(const ConstBufferSequence& buffers, boost::system::error_code& ec);

参数
buffers:包含要写入的数据的缓冲区序列。通常使用 boost::asio::buffer 函数创建。
ec:用于存储错误信息的 boost::system::error_code 对象。如果操作成功,ec 将被设置为 boost::system::error_code();如果发生错误,ec 将包含错误信息。

tcp::endpoint(地址族)

功能概述

boost::asio::ip::tcp::endpoint(upd类似)类用于表示一个 TCP 网络通信的端点,它封装了 IP 地址和端口号的信息。在网络编程中,端点是通信双方进行数据交换的基础,通过指定端点,程序可以确定与哪个 IP 地址和端口进行连接或监听。

主要功能
  • 指定通信目标:在客户端程序中,endpoint 用于指定要连接的服务器的地址和端口。
  • 绑定监听地址:在服务器程序中,endpoint 用于指定服务器要监听的地址和端口,以便接收客户端的连接请求。
  • 地址和端口管理:封装 IP 地址和端口号的信息,提供统一的接口进行操作和管理。
构造函数
  • endpoint(tcp protocol, unsigned short port)()(默认监听所有的ip地址)

参数:tcp protocol:指定使用的 TCP 协议,一般使用 tcp::v4() 表示 IPv4 协议,tcp::v6() 表示 IPv6 协议。
unsigned short port:端口号。
用途:创建一个指定协议和端口号的 endpoint 对象,IP 地址默认使用通配地址(0.0.0.0 或 ::),常用于服务器监听所有可用的网络接
口。
endpoint(tcp::v4(),8080)

  • tcp::endpoint(boost::asio::ip::address_v4 address, uint16_t port);

参数:boost::asio::ip::address_v4 address 表示ip地址
unsigned short port:端口号。
用途:创建一个指定协议和端口号的 endpoint 对象,IP 地址默认使用通配地址(0.0.0.0 或 ::),常用于服务器监听所有可用的网络接
口。
tcp::endpoint(boost::asio::ip::address_v4::from_string("127.0.0.1"),8080)

类方法
  • adress:返回 endpoint 对象中存储的 IP 地址
  • port():返回 endpoint 对象中存储的端口号
  • protocol():返回 endpoint 对象使用的协议类型

boost::asio::io_context io_context(复用IO和文件描述符)

功能概述

io_context 本质上是一个事件循环(Event Loop)管理器,它负责跟踪和调度所有注册到其中的异步操作,当这些操作完成时,会触发相应的回调函数。通过这种方式,io_context 实现了高效的并发处理,使得程序能够在等待 I/O 操作完成的同时执行其他任务。

主要功能
  • 事件循环管理:io_context 内部维护着一个事件循环,不断地检查注册的异步操作是否完成。当有操作完成时,会调用对应的回调函数进行处理。
  • 异步操作调度:程序可以将各种异步操作(如网络读写、定时器等)注册到 io_context 中,io_context 会负责在合适的时机执行这些操作。
  • 多线程支持:io_context 支持多线程环境,多个线程可以同时参与事件循环,从而提高并发处理能力。
构建函数
  • io_context();

创建一个新的 io_context 对象。这个对象可用于管理和调度异步 I/O 操作,是 Boost.Asio 中异步操作的核心管理组件。

  • explicit io_context(int concurrency_hint);

参数:
concurrency_hint:一个整数类型的参数,它为 io_context 提供关于并发操作数量的提示信息。不过,这仅仅是一个提示,io_context 不一定会严格按照这个提示来分配资源。此参数的主要作用是帮助 io_context 在某些场景下进行性能优化。
功能:创建一个新的 io_context 对象,并给出并发操作数量的提示。

常用方法
  • run()

启动 io_context 的事件循环,该方法会阻塞当前线程,直到所有注册的异步操作完成或者 io_context 被停止。

  • stop()

功能:停止 io_context 的事件循环,使得 run() 方法返回

  • poll()

执行一次事件循环,处理所有已经完成的异步操作,然后立即返回,不会阻塞线程。

  • post()

功能:将一个函数或可调用对象添加到 io_context 的任务队列中,该函数会在事件循环的下一次迭代中被执行。

tcp::acceptor(bind listen accept)

功能概述

tcp::acceptor 是 Boost.Asio 库里用于处理 TCP 连接的核心组件之一。在服务器端编程里,它的作用是监听特定的 TCP 端口,等待客户端的连接请求。一旦有客户端发起连接请求,tcp::acceptor 就能接受这个请求,并且建立起与客户端的 TCP 连接,进而在服务器和客户端之间进行数据传输。

主要功能
  • 监听端口:能够让服务器监听特定的 IP 地址和端口,等待客户端的连接请求。
  • 接受连接:当有客户端发起连接请求时,tcp::acceptor 可以接受这个请求,生成一个新的 tcp::socket 对象,以此来代表与客户端的连接。
  • 异步操作:支持异步操作,在等待客户端连接的过程中,服务器能够继续执行其他任务,而无需一直阻塞等待。
构建函数
  • tcp::acceptor(boost::asio::io_context& io_context, const endpoint_type& endpoint);()

参数:
io_context:boost::asio::io_context 对象的引用。
endpoint:tcp::endpoint 对象,代表要绑定的 IP 地址和端口。
作用 创建并打开一个 tcp::acceptor 对象,同时将其绑定到指定的端点,并开始监听该端点。

常用方法
  • void open(const protocol_type& protocol, boost::system::error_code& ec);

protocol:tcp::v4() 或 tcp::v6(),表示要使用的 TCP 协议版本。
ec:用于存储操作结果的错误码。
作用:打开 tcp::acceptor 对象,使其能够绑定到指定的端点

  • void bind(const endpoint_type& endpoint, boost::system::error_code& ec);

endpoint:tcp::endpoint 对象,代表要绑定的 IP 地址和端口。
ec:用于存储操作结果的错误码。

  • void listen(int backlog = socket_base::max_connections, boost::system::error_code& ec);

参数:
backlog:等待接受的连接队列的最大长度,默认值为 socket_base::max_connections。
ec:用于存储操作结果的错误码。
作用:开始监听绑定的端点,等待客户端的连接请求。

  • void accept(tcp::socket& socket, boost::system::error_code& ec);

socket:tcp::socket 对象的引用,用于存储接受的连接。
ec:用于存储操作结果的错误码。
作用:接受一个客户端的连接请求,并将其存储在 socket 对象中

  • template
    void async_accept(tcp::socket& socket, AcceptHandler handler);

参数:
socket:tcp::socket 对象的引用,用于存储接受的连接。
handler:异步操作完成后的回调函数。
作用:异步接受一个客户端的连接请求,当连接接受完成后,会调用回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值