网络协议的第二层境界

很多人都喜欢使用境界,来划分层次。王国维的人生三境界,玄幻小说中的内功三境界。网上有一篇《网络协议的三境界》,但作者只是蜻蜓点水一样,让人意犹未尽。

 

按照三境界的层次,我对第二层作一个实现。

 

对于网络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()来进行数据的序列化和反序列化,而不需要知道协议的具体细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值