基于Socket的十六进制数据解析
数据解析的思路
基本思路
- 消息结构体,存储从缓存中解析的数据; buffer
- 回调函数,从缓存中解析数据时调用;
- 循环队列,用于缓存接收到的数据;
关键实现: - 把接收到的数据存储到缓存中,并准备解析;
- 递归解析消息
客户端和服务器端
-
首先定义一个类存放消息中包含的信息;是实体类;类中包括客户端和服务端的两种消息;
或者客户端和服务端分开写两个实体类存放消息; -
根据一定的协议对其编解码,定义一个interface,提供序列化和反序列化方法,
(1)toWire()根据一个特定的消息,将消息转换成字节序列;
(2)formWire()根据相同的协议,对给定的字节序列解析,根据信息的内容返回一个消息类的实例; -
实现接口的两个类,一个基于文本的编码方式,一个基于十六进制的编码方式;
- 基于文本的编码方式:
使用ASCII字符集对文本进行编码,消息开头是一个字符序列,用于快速将协议的消息和网 络中随机的垃圾消息区分开;
对射发送/接收消息的布尔值,是否为服务器发送响应消息,标记对射的ID,编码成十进制;
(1)
- 基于文本的编码方式: