boost::asio::read_until数据获取重复问题

简介: 利用boost::asio::read_until读http的chunk包,读取部分代码如下:第一部分读取包头,第二部分循环读chunk包如果不调用consume清空的话,while循环里一直获取到的是包头部分的内容...

利用boost::asio::read_until读http的chunk包,读取部分代码如下:


第一部分读取包头,第二部分循环读chunk包

如果不调用consume清空的话,while循环里一直获取到的是包头部分的内容,consume的官方文档解析如下:


测试代码运行结果如下:


虽然调用了consume,但是boost::asio::buffer_cast<const char*>(sb.data())每次调用时会有部分历史数据,我解决的方法是调用string(char *, int)新增了个对象,如果有明白原因的请指教

目录
相关文章
|
4月前
boost序列化报错
boost序列化报错
|
6月前
|
存储
19.7 Boost Asio 传输序列化数据
序列化和反序列化是指将数据结构或对象转换为一组字节,以便在需要时可以将其存储在磁盘上或通过网络传输,并且可以在需要时重新创建原始对象或数据结构。 序列化是将内存中的对象转换为字节的过程。在序列化期间,对象的状态被编码为一组字节,并可以保存或传输到另一个位置。序列化后的字节可以在之后进行反序列化,以将对象重建为在序列化之前的状态。反序列化则是将字节序列重新转换为对象或数据结构的过程。在反序列化期间,字节被反转回原始对象的状态,以便它可以被使用或操作。
33 0
19.7 Boost Asio 传输序列化数据
|
6月前
19.4 Boost Asio 远程命令执行
命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个`run_command`函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符串,当接收到结束标志`goodbye lyshark`时则说明数据传输完成则退出,客户端使用`exec_command`函数,该函数通过`_popen`函数执行一条命令,并循环`fgets`读取字符串发送给服务端,最终传输一个结束标志完成通信。
28 0
19.4 Boost Asio 远程命令执行
|
6月前
19.10 Boost Asio 同步文件传输
在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含`goodbye lyshark`关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这种方式也存在一个有点,那就是无需确定文件长度,因为无需读入文件所以在传输速度上要快一些,尤其是面对大文件时。服务端代码如下所示,在代码中我们分别封装实现`recv_remote_file`该函数用于将远程特定目录下的文件拉取到本地目录下,而`send_local_file`函数则用于将一个本地文件传输到对端主机上,这两个函数都接收三个参数,分别是套接字句柄,本地
57 0
19.10 Boost Asio 同步文件传输
|
9月前
|
存储 Windows
asio源码解析
基于1.57版本
147 0
asio源码解析
|
6月前
|
Python
19.9 Boost Asio 同步字典传输
这里所代指的字典是Python中的样子,本节内容我们将通过使用Boost中自带的`Tokenizer`分词器实现对特定字符串的切割功能,使用Boost Tokenizer,可以通过构建一个分隔符或正则表达式的实例来初始化`tokenizer`。然后,可以使用该实例对输入字符串进行划分。`tokenizer`将在输入字符串中寻找匹配输入模式的标记,并将其拆分为单独的字符串。
22 0
19.9 Boost Asio 同步字典传输
|
6月前
19.5 Boost Asio 传输结构体
同步模式下的结构体传输与原生套接字实现方式完全一致,读者需要注意的是在接收参数是应该使用`socket.read_some`函数读取,发送参数则使用`socket.write_some`函数实现,对于套接字的解析同样使用强制指针转换的方法。
30 0
19.5 Boost Asio 传输结构体
|
9月前
|
存储 算法 安全
4.6 C++ Boost 函数绑定回调库
Boost库中提供了函数对象库,可以轻松地把函数的参数和返回值进行绑定,并用于回调函数。这个库的核心就是bind函数和function类。 bind函数可以将一个函数或函数对象和其参数进行绑定,返回一个新的函数对象。通过这个新的函数对象,我们就可以将原有的函数或函数对象当做参数传来传去,并可以传递附加的参数,方便实现参数绑定和回调函数。function类用于表示一种特定的函数签名,可以在不知道具体函数的类型时进行类型擦除,并把这个函数作为参数传递和存储。通过function类,我们可以在编译时确定函数的类型,而在运行时将不同类型的函数封装成统一的类型,这为实现回调函数提供了便利。
87 0
|
移动开发 网络协议 流计算