网络数据包解析的类设计

时间:2012-02-07 19:29:45

标签: c++ networking

我正在寻找建议或设计模式来处理网络数据包的解析和生成(网络本身或不是本身并不重要)。每个分组具有固定长度的报头和可变长度的有效载荷。有效负载解析将取决于数据包类型。这样做的直接方式是(假设输入将来自流,控制台或网络):

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 {
 ...
}

我设想处理逻辑的方式是:首先读取头,然后检查数据包类型,然后决定使用哪种有效负载类型来读取其余部分。

然而,我觉得这个解决方案看起来有点笨拙 - 我想知道是否有更好的解决方案或设计惯用语我应该遵循?

感谢

奥利弗

1 个答案:

答案 0 :(得分:1)

通常,您的标题是这样的:

括号[]中的内容是标题数据

  

[标题长度,数据类型]数据

如果需要,可以使用动态标题(可变长度):

  

[标题长度,块数,块1的大小,块2的大小,块3的大小等,数据类型,]数据

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