我正在寻找建议或设计模式来处理网络数据包的解析和生成(网络本身或不是本身并不重要)。每个分组具有固定长度的报头和可变长度的有效载荷。有效负载解析将取决于数据包类型。这样做的直接方式是(假设输入将来自流,控制台或网络):
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 {
...
}
我设想处理逻辑的方式是:首先读取头,然后检查数据包类型,然后决定使用哪种有效负载类型来读取其余部分。
然而,我觉得这个解决方案看起来有点笨拙 - 我想知道是否有更好的解决方案或设计惯用语我应该遵循?
感谢
奥利弗
答案 0 :(得分:1)
通常,您的标题是这样的:
括号[]中的内容是标题数据
[标题长度,数据类型]数据
如果需要,可以使用动态标题(可变长度):
[标题长度,块数,块1的大小,块2的大小,块3的大小等,数据类型,]数据
您可以创建自己的自定义标题,以匹配您发送的内容。