IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存 -> 正文阅读

[网络协议]《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存

????系列文章目录

《ZLToolKit源码学习笔记》(1)VS2019源码编译

《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析

《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析

《ZLToolKit源码学习笔记》(4)工具模块之消息广播器

《ZLToolKit源码学习笔记》(5)工具模块之资源池

《ZLToolKit源码学习笔记》(6)线程模块之整体框架概述

《ZLToolKit源码学习笔记》(7)线程模块之线程池组件:任务队列与线程组

《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器

《ZLToolKit源码学习笔记》(9)线程模块之任务执行器

《ZLToolKit源码学习笔记》(10)线程模块之线程池

《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool

《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述

《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装

《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器

《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller

《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述

《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存(本文)


前言

对原始数据char* data进行封装,提供不同的数据访问方式,用于TCP与UDP的数据收发。


目录

????系列文章目录

前言

一、概述


一、概述

?Buffer:缓存抽象基类。有两个虚函数,data和size,前者获取数据指针,后者获取数据长度,派生类需要实现这两个函数。仅通过data拿到char*时,不要直接就访问数据,因为数据可能是二进制的(不能以\0判断结尾)。std::string是可以存储二进制数据的,初始化时需要使用string(char*,int count),指定长度后不会以\0结束。

BufferOffset:基于原始数据进行偏移,截取指定长度的数据。从代码中的使用来看,由于offset和len都用的默认值,所以该类等价于直接使用std::string。

BufferOffset(C data, size_t offset = 0, size_t len = 0);

typedef BufferOffset<string> BufferString;

BufferRaw:单例类,通过create静态函数返回一个自身的智能指针对象。

BufferLikeString:类似std::string,主要是为了提高内存使用率,避免频繁申请内存。但感觉这个类没啥作用,直接使用std::string完全可以。理解该类主要看下三个成员变量:

size_t _erase_head;//原始数据中,有效数据距离开始位置的距离(开头无效数据的长度)
size_t _erase_tail;//原始数据中,有效数据距离末尾位置的距离(末尾无效数据的长度)
string _str;//原始数据

BufferSock:将Buffer和网络通信地址信息sockaddr关联起来。

BufferList:是BufferSock的友元类。接受一个Buffer的list,并提供了发送list中数据的send接口。

BufferList(List<std::pair<Buffer::Ptr, bool> > &list, SendResult cb = nullptr);

ssize_t send(int fd, int flags, bool udp);

?send在发送UDP数据时,Buffer的实例化对象只能是BufferSock,因为会用到BufferSock中的sockaddr信息。发送TCP数据的话,则不限制具体的类型,因为用到的fd之前已经connect了。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:27:45  更:2022-01-03 16:29:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 9:22:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码