网络数据包解析类设计

class design on network packet parsing

本文关键字:数据包 网络      更新时间:2023-10-16

我正在寻找建议或设计模式来处理网络数据包的解析和生成(网络本身是否重要)。每个数据包都有一个固定长度的报头和一个可变长度的有效载荷。有效载荷解析将取决于数据包类型。最简单的方法是(假设输入来自流、控制台或网络):

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的大小等,数据类型,]数据

您可以创建自己的自定义标头,以匹配您发送的任何内容。