收包与解包 - Linux C++网络编程(二十四)
一:收包分析及包头结构定义
发包:采用 包头+包体,其中包头中记录着整个包【包头—+包体】的长度;
包头:就是一个结构;
a)一个包的长度不能超过30000个字节,必须要有最大值;
伪造恶意数据包,他规定这里300亿,我这个规定能够确保服务器程序不会处于非常危险的境地;
b)开始定义包头结构:COMM_PKG_HEADER
c)********************大家千万注意这个问题,不然会大错特错;
结构字节对齐问题;为了防止出现字节问题,所有在网络上传输的这种结构,必须都采用1字节对齐方式***********
二:收包状态宏定义
收包:粘包,缺包;
收包思路:先手包头->根据包头中的内容确定包体长度并收包体,收包状态(状态机);
定义几种收包的状态, 4种:0,1,2,3
三:收包实战代码
聚焦在ngx_wait_request_handler()函数;
同时设置好各种收包的状态:c->curStat = _PKG_HD_INIT; c->precvbuf = c->dataHeadInfo; c->irecvlen = sizeof(COMM_PKG_HEADER);
我们要求,客户端连入到服务器后,要主动地【客户端有义务】给服务器先发送数据包;服务器要主动收客户端的数据包;
服务器按照 包头 + 包体的格式来收包;
引入一个消息头【结构】STRUC_MSG_HEADER,用来记录一些额外信息
服务器 收包时, 收到: 包头+包体 ,我再额外附加一个消息头 ===》 消息头 + 包头 + 包体
再介绍一个分配和释放内存类CMemory;
本项目中不考虑内存池; 内存池:对于提高程序运行效率帮助有效;new非常快;
内存池主要功能就是 频繁的分配小块内存时 内存池可以节省额外内存开销【代价就是代码更复杂】;
四:遗留问题处理
inMsgRecvQueue,tmpoutMsgRecvQueue,clearMsgRecvQueue
五:测试服务器收包避免推诿扯皮
验证ngx_wait_request_handler()函数是否正常工作,准备写一个客户端程序;
windows vs2017 ,mfc程序
老师强制大家要写测试程序来测试;你可以写linux平台下的测试程序;
觉悟:服务器主程序员【重担压肩】;
防止扯皮,所以服务器端有必要自己书写一个客户端测试程序;
说明:windows vs2017 客户端测试代码,非常简陋,只用于演示目的,不具备商业代码质量;
客户端的 SendData()函数值得学习;
核心代码;MFCApplication3Dlg.cpp
收包与解包 - Linux C++网络编程(二十四)相关推荐
- linux网络编程二十:socket选项:SO_RCVTIMEO和SO_SNDTIMEO
- 【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试
人的前程关于眼界.关乎格局. 志之所趋,无远弗届,穷山复海不能限也: 志之所向,无坚不入,锐兵精甲不能御也. 一.I2C驱动框架简介 Linux内核将 I2C 驱动分为两部分: ①. ...
- 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写
参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...
- 微信小程序抓包与逆向+微信小程序反编译教程+解包教程+解包工具
免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西 本人发布的视频.环境.软件.脚本.文章.资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付 部分技术 ...
- linux和网络编程笔记
第一部分.章节目录 3.4.1.程序的开始和结束 3.4.2.进程环境 3.4.3.进程的正式引入 3.4.4.fork创建子进程 3.4.5.父子进程对文件的操作 3.4.6.进程的诞生和消亡 3. ...
- Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...
- Linux C 网络编程 仿照网盘的功能
Linux C 网络编程 仿照网盘的功能 代码: gitbub 代码,欢迎下载测试 使用概述 启动 server-> make;./server ../conf/serverconf.ini c ...
- 基于linux epoll网络编程细节处理丨epoll原理剖析
epoll原理剖析以及三握四挥的处理 1. epoll原理详解 2. 连接的创建与断开 3. epoll如何连接细节问题 视频讲解如下,点击观看: 基于linux epoll网络编程细节处理丨epol ...
- Linux下网络编程
Linux下网络编程初步 Linux以其源代码公开闻名于世,并以其稳定性和可靠性雄霸操作系统领域,在网络应用技术方面使用得更加广泛.很久以来它就是Windows的重要对手之一.随着网络时代的来临,Li ...
- linux网络编程二:基础socket, bind, listen, accept, connect
linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h> #inc ...
最新文章
- C#中将dll汇入exe,并加壳
- 内存都是由半导体器件构成的_开启5G新时代——XPS成像技术在半导体器件中的应用...
- Hibernate学习笔记
- MySQL分区表概念以及优缺点
- 剑指offer——面试题15:链表中倒数第k个结点
- 三招帮你解决物联网卡上不了网问题
- Unity基础知识之协程
- 批量管理微信社群,社群助手
- python按顺序执行函数_Python3的unittest用例按编写顺序执行
- Windows事件ID及解释大全
- FinalReport连接MYSQL数据库失败经验分享
- 程序员:耐得住寂寞,禁得住诱惑
- 博乐助手连接服务器出错,Game Center无法连接服务器 Game Center无法连接服务器解决方法...
- split方法————java中
- 腾讯会议怎么录屏?几个步骤轻松录屏
- Mapreduce Wordcount白名单 Python实现
- Android 蓝牙 搜索周围设备代码流程分析-framework到协议栈流程
- 米氏散射多次散射计算程序
- 初识搜索引擎 —— ElasticSearch
- 应用签名不一致,该应用可能被篡改的问题