网络游戏中使用TCP处理粘包的两种思路

    TCP作为面向连接的、可靠的、基于字节流的传输层网络通讯协议,应用非常广泛。由于是基于字节流的网络协议,我们使用TCP协议进行网络通讯,底层会将发送的数据进行拆分组合,这样一般都会遇到粘包和半包的问题。一般我们为了解决粘包问题,解决粘包和半包问题有两种思路:

  1. 将发送数据封装成包,就像TCP协议一样加一个包头。
  2. 使用分隔符,对发送数据时在数据尾部加入分割符。

 

     第一种方式处理粘包,可以在要发送数据的首部加2字节大小的包头储存数据包的长度,在数据结束位置加一个字节的包尾用来校验数据。校验值等于循环数据的每个字节按位异或的最终值。

     一般网络游戏服务器中比如手游会采用第一种方式处理粘包问题,在设计协议时都会考虑粘包问题,每一条协议都包含协议头和协议体。而设计协议头时就需要考虑粘包问题,而协议体便是我们要发送的数据。

协议头:

struct protocol_head_t
{
   unsigned short tag;  // 0xFBFC 先导码标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值