news 2026/9/1 20:44:19

(2)与Boost.Asio相关的函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(2)与Boost.Asio相关的函数

今天我们来学习与Boost.Asio相关的变量和函数

1. boost::asio::ip::address

表示一个通用 IP 地址对象,可以是 IPv4,也可以是 IPv6 eg:boost::asio::ip::address ip_address=boost::asio::ip::make_address("127.0.0.1");

2. boost::system::error_code

//错误码 用来保存错误信息,避免直接抛异常boost::system::error_code ec;ec.value()判断是否成功执行 返回值0成功!=0错误 ec.message()返回错误描述文本 eg:boost::system::error_code ec;std::cout<<"Error , code is "<<ec.value()<<" Message is "<<ec.message();

3. boost::asio::ip::tcp::endpoint

表示一个 TCP 端点,本质上是 IP 地址+端口号 boost::asio::ip::tcp::endpoint(constaddress&addr,unsignedshortport_num);参数 addr:一个 ip::address 对象 port_num:端口号 eg:boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);uint16_tport_num=8888;boost::asio::ip::tcp::endpointep(ip_address,port_num);

5. boost::asio::ip::make_address()函数

//作用 把字符串形式的 IP 地址转换成 asio::ip::address 对象,它既能解析 IPv4,也能解析 IPv6addressmake_address(constchar*str,boost::system::error_code&ec);带错误处理 addressmake_address(constchar*str);不带错误处理 参数 str:想要转换的原始 IP 地址字符串 ec:输出参数 用于捕获转换过程中发生的错误 返回值 一个boost::asio::ip::address对象 既可以存 IPv4 也可以存 IPv6 eg:std::string raw_ip_address="127.0.0.1";boost::system::error_code ec;boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address,ec);

6. boost::asio::ip::address_v6::any()与boost::asio::ip::address_v4::any()

boost::asio::ip::address_v6::any()返回 IPv4 的任意地址,也就是“本机所有 IPv4 地址” boost::asio::ip::address_v4::any()返回 IPv6 的任意地址,也就是“本机所有 IPv6 地址”

7. boost::asio::io_context

io_context是Asio的I/O执行上下文 eg:boost::asio::io_context ioc;//创建一个 I/O 环境

8. boost::asio::ip::tcp::v4()与boost::asio::ip::tcp::v6()

boost::asio::ip::tcp::v4()表示 TCP over IPv4 协议对象、指定后面要用 IPv4 TCP 协议 boost::asio::ip::tcp::v6()表示 TCP over IPv6 协议对象、指定后面要用 IPv6 TCP 协议

9. asio::ip::tcp::socket

表示一个 TCP 套接字对象explicitsocket(boost::asio::io_context&io_context);socket(boost::asio::io_context&io_context,consttcp&protocol);指定协议 参数 io_context:上下文 protocol:端口指定协议 通常传入 tcp::v4()或 tcp::v6()eg:boost::asio::io_context ioc;boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);uint16_tport_num=8888;boost::asio::ip::tcp::endpointep(ip_address,port_num);boost::asio::ip::tcp::socketsock(ioc);boost::asio::ip::tcp::socketsock(ioc,ep.protocol());

10. sock.connect()

把当前 socket 连接到指定端点 eg:boost::asio::io_context ioc;boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);uint16_tport_num=8888;boost::asio::ip::tcp::endpointep(ip_address,port_num);boost::asio::ip::tcp::socketsock(ioc);boost::asio::ip::tcp::socketsock(ioc,ep.protocol());sock.connect(ep)

11. boost::asio::ip::tcp::acceptor

表示 TCP 服务端监听器,它负责监听端口并接受客户端连接,不负责真正的数据收发acceptor(boost::asio::io_context&io_context,consttcp::endpoint&endpoint,boolreuse_addr=true);参数 io_context:上下文 endpoint:端口+IP地址 reuse_addr:隐藏的默认参数 eg:boost::asio::io_context ioc;boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);uint16_tport_num=8888;boost::asio::ip::tcp::endpointep(ip_address,port_num);boost::asio::ip::tcp::acceptoracceptor(ioc,ep);

12. acceptor.bind()

把 acceptor 绑定到本地端点,也就是把某个地址和端口交给当前程序占用 boost::system::error_codebind(constendpoint_type&endpoint,boost::system::error_code&ec);参数 endpoint:端口+IP地址 ec:错误码 eg:boost::system::error_code ec;boost::asio::io_context ioc;boost::asio::ip::address ip_address=boost::asio::ip::make_address(raw_ip_address);uint16_tport_num=8888;boost::asio::ip::tcp::endpointep(ip_address,port_num);boost::asio::ip::tcp::acceptoracceptor(ioc,ep);acceptor.bind(ep,ec);

13. acceptor.listen()

让 acceptor 开始进入监听状态,准备接收连接请求voidlisten(intbacklog=boost::asio::socket_base::max_listen_connections);参数 backlog:挂起连接队列的最大长度 eg:constintBACKLOG_SIZE=128;acceptor.listen(BACKLOG_SIZE);

14. acceptor.accept()

接受一个新的客户端连接,并把这个连接交给socket eg:acceptor.accept(sock);

15. boost::asio::ip::tcp::resolver()

做域名解析 eg:boost::asio::io_context ioc;boost::asio::ip::tcp::resolverresolver(ioc);

16. resolver.resolve()

把主机名+服务名/端口解析成一个或多个 endpoint 结果 results_typeresolve(string_view host,string_view service,resolver_base::flags flags);参数 host:主机名 可以是域名"goole.com"或具体的 IP 地址字符串"127.0.0.1"service:服务名/端口 flags:解析标志 passive:用于服务器端。返回的地址将适合用于 bind。 canonical_name:请求返回主机的规范名称 numeric_host:强制要求 host 必须是数字形式的 IP,不进行 DNS 查询(提高速度) numeric_service:强制要求 service 必须是数字端口号 v4_mapped:如果没有找到 IPv6 地址,则返回映射到 IPv6 的 IPv4 地址 返回值 一个迭代器范围 eg:autoresults=resolver.resolve(host,port_num,boost::asio::ip::resolver_base::numeric_service);

17. boost::asio::connect()

尝试把 socket 连接到解析结果中的某个可用 endpointtemplate<typenameProtocol,typenameEndpointSequence>typenameProtocol::endpointconnect(basic_socket<Protocol>&s,constEndpointSequence&endpoints);参数 s:创建的socket对象的引用 endpoints:resolver.resolve()的返回值 eg:boost::asio::connect(sock,results);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:26:47

SQL注入绕过详解与防御机制

一、绕过方法 我们针对防护机制的不同&#xff0c;总结一下绕过手法 1-绕过注释符过滤 绕过方法&#xff1a;闭合引号法&#xff1a;不依赖注释符&#xff0c;而是通过巧妙构造输入&#xff0c;让原始的SQL语句自行闭合&#xff0c;从而语法正确。我们利用输入的内容1 and 11闭…

作者头像 李华
网站建设 2026/7/14 17:26:45

从“黑客”视角看安全:渗透测试到底在测什么?

从“黑客”视角看安全&#xff1a;渗透测试到底在测什么&#xff1f; “为什么斥巨资买了防火墙&#xff0c;黑客还是能如入无人之境&#xff1f;” 本文带你换上“连帽衫”&#xff0c;从零基础视角拆解渗透测试的思维逻辑&#xff0c;看清那些被你忽视的安全缝隙。 一、 什…

作者头像 李华
网站建设 2026/7/14 17:26:59

SL3051B与SL3052B脚位兼容SY8089高效同步降压DC-DC

脚位兼容SY8089&#xff0c;森利威尔SL3051B与SL3052B高效同步降压DC-DC转换器解析在便携式电子产品和物联网设备蓬勃发展的今天&#xff0c;电源管理芯片的性能直接决定了系统的续航能力、发热表现以及运行的稳定性。针对单节锂电池供电的应用场景&#xff0c;森利威尔原厂推出…

作者头像 李华
网站建设 2026/7/14 17:26:59

2027应届生专属考公备考路径全整理

对于2027届应届生而言&#xff0c;考公不仅是就业选择的重要方向&#xff0c;更是利用应届生身份优势降低竞争压力的关键契机。国考及多数省考会设置一定数量的应届生专属岗位&#xff0c;部分省市省考对应届生的招录倾斜力度较大&#xff0c;提前规划备考路径&#xff0c;能帮…

作者头像 李华
网站建设 2026/7/14 17:26:58

Nachi_EZ03_喷砂机器人防护服使用指南_详解与避坑

标题&#xff1a;Nachi_EZ03_喷砂机器人防护服使用指南_详解与避坑正文&#xff1a;你是不是也觉得&#xff0c;给那智EZ03机器人穿上防护服&#xff0c;就是简单地“套上去”完事&#xff1f;如果你这么想&#xff0c;那这台昂贵的设备和它的核心防护部件&#xff0c;可能正面…

作者头像 李华