当前位置: 首页 > wzjs >正文

18款禁用黄app入口直接看长沙网站seo优化

18款禁用黄app入口直接看,长沙网站seo优化,网站建设webmeng,彩票网站开发制作需要什么前置 跨平台C++包管理利器vcpkg完全指南 一、为什么需要自定义协议? 1. 常见问题 粘包/半包:TCP是流式协议,数据可能被拆分成多个包或合并。数据校验:传输过程中可能发生比特错误或篡改。跨平台兼容性:不同系统对数据类型(如整型字节序)的处理不同。2. 解决方案 定长消…

前置

跨平台C++包管理利器vcpkg完全指南


一、为什么需要自定义协议?

1. 常见问题

  • 粘包/半包:TCP是流式协议,数据可能被拆分成多个包或合并。
  • 数据校验:传输过程中可能发生比特错误或篡改。
  • 跨平台兼容性:不同系统对数据类型(如整型字节序)的处理不同。

2. 解决方案

  • 定长消息:每个消息固定长度(简单但不够灵活)。
  • 分隔符:用特殊字符(如\r\n)分割消息(需转义处理)。
  • 长度前缀:在消息头声明数据长度(推荐方案)。

二、设计二进制协议(自定义)

1. 协议格式示例

| 魔数(4B) | 版本(1B) | 类型(1B) | 长度(4B) | 数据(N B) | CRC32(4B) |

字段说明

  • 魔数:固定值(如0xDEADBEEF),用于识别协议起始。
  • 版本:协议版本号,支持向后兼容。
  • 类型:消息类型(如请求、响应、心跳)。
  • 长度:数据部分的字节数。
  • 数据:有效载荷(如序列化的JSON或二进制数据)。
  • CRC32:校验和,验证数据完整性。

2. C++示例

#include <cstdint>
#include <vector>
#include <cstring>
#include <zlib.h>
#include <iostream>
#include <stdexcept>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")// 平台字节序处理(示例为小端模式)
#if defined(_MSC_VER)
#  define htonl(x) _byteswap_ulong(x)
#elif defined(__GNUC__)
#  define htonl(x) __builtin_bswap32(x)
#endif// 严格内存对齐的协议头
#pragma pack(push, 1)
struct PacketHeader {uint32_t magic;    // 固定魔数 0xDEADBEEFuint8_t  version;  // 协议版本uint8_t  type;     // 数据类型标识uint32_t length;   // 载荷长度(网络字节序)PacketHeader(uint8_t t = 1, uint32_t len = 0): magic(htonl(0xDEADBEEF)),  // 存储为网络字节序version(1),type(t),length(htonl(len)) {}
};
#pragma pack(pop)// 编码函数:生成带校验的数据包
std::vector<uint8_t> EncodePacket(uint8_t type, const std::vector<uint8_t>& payload) {if (payload.size() > 0xFFFFFFFF) {throw std::invalid_argument("Payload too large");}// 构造协议头PacketHeader header(type, static_cast<uint32_t>(payload.size()));// 计算CRC32(头+载荷)std::vector<uint8_t> tempBuffer;tempBuffer.reserve(sizeof(header) + payload.size());tempBuffer.insert(tempBuffer.end(),reinterpret_cast<uint8_t*>(&header),reinterpret_cast<uint8_t*>(&header) + sizeof(header));tempBuffer.insert(tempBuffer.end(), payload.begin(), payload.end());uLong crc = crc32(0L, Z_NULL, 0);crc = crc32(crc, tempBuffer.data(), tempBuffer.size());uint32_t netCrc = htonl(crc);  // CRC也转为网络字节序// 组装完整包std::vector<uint8_t> packet;packet.insert(packet.end(), tempBuffer.begin(), tempBuffer.end());packet.insert(packet.end(),reinterpret_cast<uint8_t*>(&netCrc),reinterpret_cast<uint8_t*>(&netCrc) + sizeof(netCrc));return packet;
}// 解码函数:验证并提取数据
bool DecodePacket(const std::vector<uint8_t>& packet,uint8_t& type,std::vector<uint8_t>& payload) {// 基础长度检查const size_t minSize = sizeof(PacketHeader) + sizeof(uint32_t);if (packet.size() < minSize) return false;// 解析协议头PacketHeader header;memcpy(&header, packet.data(), sizeof(header));header.magic = ntohl(header.magic);    // 转换为主机字节序header.length = ntohl(header.length);// 魔数和版本校验if (header.magic != 0xDEADBEEF || header.version != 1) {return false;}// 载荷长度校验const size_t expectedSize = sizeof(header) + header.length + sizeof(uint32_t);if (packet.size() != expectedSize) {return false;}// 提取CRC并转换字节序
http://www.dtcms.com/wzjs/385753.html

相关文章:

  • 在哪家网站上可以找到加工活做属于seo网站优化
  • 织梦网站建设培训网站建设报价单模板
  • 网站建设是基于什么是网络营销平台
  • 微金所网站谁做的手机百度云网页版登录
  • 网站建设关于公司怎么写嘉兴seo外包平台
  • 自己做网站怎么能被访问企业网站优化排名
  • 网站怎么更新网页内容搜索引擎平台
  • 温州专业网站建设杭州百度首页优化
  • 柯桥区建设局网站制作网页的流程
  • 保定网站建设推广公司怎么样百度经验手机版官网
  • 青海市住房和城乡建设厅网站今天发生了什么重大新闻
  • 汽车用品网站建设公司推广渠道
  • 做承兑 汇票一般会用哪些网站百度搜索引擎优化的推广计划
  • 网站建设成都公司最新新闻事件摘抄
  • 网站要做手机版怎么做今日国内新闻最新消息10条新闻
  • 嘉兴网站建设兼职拼多多关键词优化步骤
  • 今日头条网站是用什么系统建设的外链兔
  • 深圳个人网站建设今日新闻联播主要内容
  • 公司网站 个人备案线上推广策略
  • 尊园地产做的网站搜索引擎营销的作用
  • 网站建设官网型好呢还是商城型网络营销网课
  • 北京赛车网站开发多少钱2023年7月最新新闻摘抄
  • wordpress smtp非插件北京seo代理商
  • 淘客网站让别人做做app软件大概多少钱
  • wordpress 新闻采集站济南做网站公司
  • 河北固安县网站建设西安百度推广竞价托管
  • dede无法一键更新网站网站建设品牌公司
  • 做网站维护的是什么人谷歌广告推广怎么做
  • 老网站绑定新网站如何做?站长工具流量统计
  • 自己有一个域名怎么做网站网站收录情况