您的位置:首页 > 理论基础 > 计算机网络

网络协议的第二层境界

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()来进行数据的序列化和反序列化,而不需要知道协议的具体细节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: