网络数据包解析类设计
class design on network packet parsing
我正在寻找建议或设计模式来处理网络数据包的解析和生成(网络本身是否重要)。每个数据包都有一个固定长度的报头和一个可变长度的有效载荷。有效载荷解析将取决于数据包类型。最简单的方法是(假设输入来自流、控制台或网络):
class Header {
public:
Header(istream &);
istream& read(istream &);
private:
uint32_t type;
uint32_t payload_length;
}
class PayloadTypeA {
public:
PayloadTypeA {}
istream& read(istream &);
private:
uint32_t payload_1;
uint32_t payload_2;
}
class PayloadTypeB {
...
}
我设想的处理逻辑的方式是:首先读取标头,然后检查数据包类型,然后决定使用哪种有效载荷类型来读取其余部分
然而,我觉得这个解决方案似乎有些笨拙——我想知道是否有更好的解决方案或设计习惯用法应该遵循?
感谢
Oliver
通常,您的头是这样的:
括号[]中的内容是标题数据
[标题长度,数据类型,]数据
如果你愿意,你可以有一个动态标题(可变长度):
[报头长度、块数、块1的大小、块2的大小、组块3的大小等,数据类型,]数据
您可以创建自己的自定义标头,以匹配您发送的任何内容。
相关文章:
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 从网络数据包复制一串 wchar 时访问冲突
- 使用 UDP 协议从 Windows 套接字发送到 Qt 套接字的网络数据包上的结构编码和解码
- 使用SFML验证实时网络上发送的数据包
- 在 Cassandra 中使用 "time" 作为行键来存储网络数据包
- 网络数据包创建/解析库
- 表示网络数据包的C++类
- 网络数据包解析类设计
- 如何用C/C++生成网络数据包
- 在具有不同UDP端口的网络计算机上发送/接收数据包
- 传递不同类型的数据,以void指针函数添加到网络数据包(我认为?)