欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 应用层自定义协议与序列化

应用层自定义协议与序列化

2025/4/18 19:11:38 来源:https://blog.csdn.net/m0_74824254/article/details/140362166  浏览:    关键词:应用层自定义协议与序列化

个人主页:Lei宝啊 

愿所有美好如期而遇


协议

简单来说,就是通信双方约定好的结构化的数据。

序列化与反序列化

我们通过一个问题引入这个概念,假如我们要实现一个网络版的计算器,那么现在有两种方案,第一种,客户端发送一种类似于“1+1”这样的字符串,服务端接收到后进行拆解,然后计算。第二种,双方约定好一种结构体,按照某种规则转换成字符串发送给对方,然后对方再按照这种规则拆解成结构体,这个过程就叫做序列化与反序列化。

无论我们采用方案一, 还是方案二, 还是其他的方案, 只要保证, 一端发送时构造的数据,
在另一端能够正确的进行解析, 就是 ok 的. 这种约定, 就是 应用层协议。

理解Tcp为什么支持全双工

什么是全双工?简单来说,就是同时收发消息,而消息之间不会互相受到干扰。

具体来讲,全双工(Full Duplex)是一种通信方式,它允许数据在通信链路的两个方向上同时传输,即通信的双方可以同时发送和接收数据。

因为OS系统内部,Tcp为每一个连接的客户端维护了两个缓冲区,一个是发送缓冲区,一个是接收缓冲区,这样,就可以同时发送和接收信息而不互相干扰,read,write等系统调用在Tcp这里,也就支持了一个socketfd既可以读,也可以写。

Tcp粘包问题

TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。这种现象既可能由发送方造成,也可能由接收方造成。

由于Tcp是基于字节流的协议,发送缓冲区内的数据什么时候发,发多少,出错了怎么办,完全由Tcp协议自己决定,所以就会导致出现报文发送不完整或者接收方不能读取完整报文的情况,那么接受方如果不对这种报文进行正确处理,就会导致粘包现象。

我们解决粘包问题的方案是,循环读入数据判断报文是否完整,如果完整则处理,并将缓冲区中的这段报文删除,判断处理下一个。


关于具体实现方案,我们后面的文章中,会给出具体实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词