一:收包分析及包头结构定义

发包:采用 包头+包体,其中包头中记录着整个包【包头—+包体】的长度;

包头:就是一个结构;

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++网络编程(二十四)相关推荐

  1. linux网络编程二十:socket选项:SO_RCVTIMEO和SO_SNDTIMEO

  2. 【嵌入式Linux驱动开发】二十四、Linux I2C 驱动上手尝试

      人的前程关于眼界.关乎格局.   志之所趋,无远弗届,穷山复海不能限也:   志之所向,无坚不入,锐兵精甲不能御也. 一.I2C驱动框架简介   Linux内核将 I2C 驱动分为两部分: ①. ...

  3. 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写

    参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...

  4. 微信小程序抓包与逆向+微信小程序反编译教程+解包教程+解包工具

    免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西 本人发布的视频.环境.软件.脚本.文章.资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付 部分技术 ...

  5. linux和网络编程笔记

    第一部分.章节目录 3.4.1.程序的开始和结束 3.4.2.进程环境 3.4.3.进程的正式引入 3.4.4.fork创建子进程 3.4.5.父子进程对文件的操作 3.4.6.进程的诞生和消亡 3. ...

  6. Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

    Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...

  7. Linux C 网络编程 仿照网盘的功能

    Linux C 网络编程 仿照网盘的功能 代码: gitbub 代码,欢迎下载测试 使用概述 启动 server-> make;./server ../conf/serverconf.ini c ...

  8. 基于linux epoll网络编程细节处理丨epoll原理剖析

    epoll原理剖析以及三握四挥的处理 1. epoll原理详解 2. 连接的创建与断开 3. epoll如何连接细节问题 视频讲解如下,点击观看: 基于linux epoll网络编程细节处理丨epol ...

  9. Linux下网络编程

    Linux下网络编程初步 Linux以其源代码公开闻名于世,并以其稳定性和可靠性雄霸操作系统领域,在网络应用技术方面使用得更加广泛.很久以来它就是Windows的重要对手之一.随着网络时代的来临,Li ...

  10. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

最新文章

  1. C#中将dll汇入exe,并加壳
  2. 内存都是由半导体器件构成的_开启5G新时代——XPS成像技术在半导体器件中的应用...
  3. Hibernate学习笔记
  4. MySQL分区表概念以及优缺点
  5. 剑指offer——面试题15:链表中倒数第k个结点
  6. 三招帮你解决物联网卡上不了网问题
  7. Unity基础知识之协程
  8. 批量管理微信社群,社群助手
  9. python按顺序执行函数_Python3的unittest用例按编写顺序执行
  10. Windows事件ID及解释大全
  11. FinalReport连接MYSQL数据库失败经验分享
  12. 程序员:耐得住寂寞,禁得住诱惑
  13. 博乐助手连接服务器出错,Game Center无法连接服务器 Game Center无法连接服务器解决方法...
  14. split方法————java中
  15. 腾讯会议怎么录屏?几个步骤轻松录屏
  16. Mapreduce Wordcount白名单 Python实现
  17. Android 蓝牙 搜索周围设备代码流程分析-framework到协议栈流程
  18. 米氏散射多次散射计算程序
  19. 初识搜索引擎 —— ElasticSearch
  20. 应用签名不一致,该应用可能被篡改的问题

热门文章

  1. 专访“澳洲中本聪”:我打算用钱摧毁比特大陆
  2. python 爬取城市空气质量数据
  3. c语言常量中有负数吗,c语言能对负数求余吗 在c语言中是什么意思
  4. 如何解压缩后缀名为zip.001,zip.002等的文件
  5. [源码] Spark如何划分Stage
  6. 解决DNS服务器未响应网络异常
  7. config配置中心
  8. 机器学习:美国50K工资分类(改)
  9. python爬虫爬取百度图片总结_python爬虫如何批量爬取百度图片
  10. Selenium(Java)-使窗口最大化