boost库asio详解7——boost::asio::buffer用法

2024-06-15 01:58
文章标签 详解 用法 boost buffer asio

本文主要是介绍boost库asio详解7——boost::asio::buffer用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. asio::buffer常用的构造方法

asio::buffer有多种的构造方法,而且buffer大小是自动管理的

1.1 字符数组

[cpp]  view plain copy print ?
  1. char d1[128];  
  2. size_t bytes_transferred = socket.receive(boost::asio::buffer(d1));  

1.2 字符向量

[cpp]  view plain copy print ?
  1. std::vector<char> d2(128);  
  2. size_t bytes_transferred = socket.receive(boost::asio::buffer(d2));  

1.3 boost的数组

[cpp]  view plain copy print ?
  1. boost::array<char, 128> d3;  
  2. size_t bytes_transferred = sock.receive(boost::asio::buffer(d3));   

1.4 字符串

[cpp]  view plain copy print ?
  1. string str = "hello world";  
  2. bytes_transferred = socket.send(boost::asio::buffer(str));   

2. asio::buffer的常用方法

2.1 转换方法

[cpp]  view plain copy print ?
  1. boost::asio::mutable_buffer b1 =boost::asio::buffer(str);  
  2. unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);  

2.2 获取大小

[cpp]  view plain copy print ?
  1. std::size_t s1 = boost::asio::buffer_size(b1);  

3. asio::buffer的读写问题

注意 的是boost::asio::const_buffer是只读的buffer, 而boost::asio::mutable_buffer则可写。
读写buffer也是有讲究的 

3.1 与transfer_all()结合

[cpp]  view plain copy print ?
  1. boost::array<char, 128> buf;  
  2. boost::system::error_code ec;  
  3. std::size_t n = boost::asio::read(  
  4.     socket,  
  5.     boost::asio::buffer(buf),  
  6.     boost::asio::transfer_all(),  
  7.     ec);  
  8. if (ec)  
  9. {  
  10.   // An error occurred.  
  11. }  
  12. else  
  13. {  
  14.   // n == 128  
  15. }  
boost::asio::transfer_all()能够使buffer中的所有数据都传送完毕。即读满buffer为止。

3.2 与transfer_at_least()结合

[cpp]  view plain copy print ?
  1. std::size_t n = boost::asio::read(  
  2.     socket,  
  3.     boost::asio::buffer(buf),  
  4.     boost::asio::transfer_at_least(64),  
  5.     ec);  
意义即读满64字节为止。返回。
当然还有最常用的 bytes_transferred ,这个例子就很多了。 

这篇关于boost库asio详解7——boost::asio::buffer用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062114

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现