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)新增了个对象,如果有明白原因的请指教

目录
相关文章
|
11月前
19.4 Boost Asio 远程命令执行
命令执行机制的实现与原生套接字通信一致,仅仅只是在调用时采用了Boost通用接口,在服务端中我们通过封装实现一个`run_command`函数,该函数用于发送一个字符串命令,并循环等待接收客户端返回的字符串,当接收到结束标志`goodbye lyshark`时则说明数据传输完成则退出,客户端使用`exec_command`函数,该函数通过`_popen`函数执行一条命令,并循环`fgets`读取字符串发送给服务端,最终传输一个结束标志完成通信。
19.4 Boost Asio 远程命令执行
|
11月前
19.10 Boost Asio 同步文件传输
在原生套接字编程中我们介绍了利用文件长度来控制文件传输的方法,本节我们将采用另一种传输方式,我们通过判断字符串是否包含`goodbye lyshark`关键词来验证文件是否传输结束了,当然了这种传输方式明显没有根据长度传输严谨,但使用这种方式也存在一个有点,那就是无需确定文件长度,因为无需读入文件所以在传输速度上要快一些,尤其是面对大文件时。服务端代码如下所示,在代码中我们分别封装实现`recv_remote_file`该函数用于将远程特定目录下的文件拉取到本地目录下,而`send_local_file`函数则用于将一个本地文件传输到对端主机上,这两个函数都接收三个参数,分别是套接字句柄,本地
19.10 Boost Asio 同步文件传输
|
1月前
|
Linux C语言 Python
perf_event_open 学习 —— 通过read的方式读取硬件技术器
perf_event_open 学习 —— 通过read的方式读取硬件技术器
|
存储 Windows
asio源码解析
基于1.57版本
192 0
asio源码解析
|
网络协议 PHP
php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()
php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()
311 0
rxjs里b = a.pipe(map(mapFn))的执行示意图
rxjs里b = a.pipe(map(mapFn))的执行示意图
97 0
rxjs里b = a.pipe(map(mapFn))的执行示意图
|
移动开发 网络协议 流计算
boost boost::asio::read socket.read_some 区别
boost boost::asio::read 尝试读一定数量的字节,直到读到为止,或者出错  socket.read_some 读一下socket,读到多少算多少  带async的类似
2057 0