网络协议的第二层境界
2011-07-14 16:51
323 查看
很多人都喜欢使用境界,来划分层次。王国维的人生三境界,玄幻小说中的内功三境界。网上有一篇《网络协议的三境界》,但作者只是蜻蜓点水一样,让人意犹未尽。
按照三境界的层次,我对第二层作一个实现。
对于网络TCP或UDP流来说,在send和recv操作,不管上层是怎样一个结构、对象,最终都要序列化为流,char*流或byte流,或从流中反序列化回来。
按照DRY原则,我们在调用send之前,必须进行序列化。
按照OO原则,我们定义一个基类:Message
class Message
{
public:
int Serialize(LPVOID lpBuffer, int cbBuffer) = 0;
int Deserialize(LPVOID lpBuffer, int cbBuffer) = 0;
int GetLength() = 0;
}
拿登陆消息,
class Login : public Message
{
public:
int Serialize(LPVOID lpBuffer, int cbBuffer)
{
int len;
len = strName.size();
memcpy(lpBuffer, &len, sizeof(UINT32));
memcpy(lpBuffer, &strName.c_str, len);
}
int Deserialize(LPVOID lpBuffer, int cbBuffer);
int GetLength()
{
int len = 0;
len = sizeof(UINT32) + strName.size() + sizeof(UINT32) + strPassword.size();
return len;
}
public:
// 登陆数据
std::string strName;
std::string strPassword;
}
网络模块,在发送或接收时,就可以直接调用Serialize()和DeSerialize()来进行数据的序列化和反序列化,而不需要知道协议的具体细节。
按照三境界的层次,我对第二层作一个实现。
对于网络TCP或UDP流来说,在send和recv操作,不管上层是怎样一个结构、对象,最终都要序列化为流,char*流或byte流,或从流中反序列化回来。
按照DRY原则,我们在调用send之前,必须进行序列化。
按照OO原则,我们定义一个基类:Message
class Message
{
public:
int Serialize(LPVOID lpBuffer, int cbBuffer) = 0;
int Deserialize(LPVOID lpBuffer, int cbBuffer) = 0;
int GetLength() = 0;
}
拿登陆消息,
class Login : public Message
{
public:
int Serialize(LPVOID lpBuffer, int cbBuffer)
{
int len;
len = strName.size();
memcpy(lpBuffer, &len, sizeof(UINT32));
memcpy(lpBuffer, &strName.c_str, len);
}
int Deserialize(LPVOID lpBuffer, int cbBuffer);
int GetLength()
{
int len = 0;
len = sizeof(UINT32) + strName.size() + sizeof(UINT32) + strPassword.size();
return len;
}
public:
// 登陆数据
std::string strName;
std::string strPassword;
}
网络模块,在发送或接收时,就可以直接调用Serialize()和DeSerialize()来进行数据的序列化和反序列化,而不需要知道协议的具体细节。
相关文章推荐
- 网络协议编写的三层境界
- 网络协议编写的三层境界
- L2F:第二层转发协议--网络大典
- 第二层隧道协议(L2TP)--网络大典
- 网络协议编写的三层境界
- 网络协议编写的三层境界
- 网络协议编写的三层境界
- 网络协议编写的3层境界
- 网络协议编写的三层境界
- 网络协议三层境界
- 网络协议编写的三层境界
- Python高级 -- 05 网络(http协议、web服务器、tcp/ip协议、网络通信)
- 网络 协议与分层结构 的学习心得
- 网络协议分析(IPv6/ICMPv6协议工作机制分析 )
- 最全的一张网络协议图
- Linux网络协议源代码分析 之 系统调用
- java基础学习网络编程之UDP和TCP协议 十四 -3
- 计算机网络的体系结构与协议
- 网络协议分析(PPP协议)
- 1.1. 互联网与网络协议