网络数据分包,拼接包数据

项目场景:

提示:这里简述项目相关背景:

在处理网络数据的时候,如果数据量过大,就会存在包不完整,发送的数据存在断断续续的问题,为了解决这个问题,我整理出以下方案,只是个人观点,需要自拿


问题描述

提示:这里描述项目中遇到的问题:

处理网络数据,分包,拼接数据处理

解决方案:

static List<byte> buffer = new List<byte>();

void ProcessReceivedData(byte[] receivedData)
    {
        buffer.AddRange(receivedData); // 将接收到的数据添加到缓冲区
        //GameLogger.LogCyan($"缓冲大小: {buffer.Count }");
        // 检查是否有足够数据组成完整数据包
        while (buffer.Count >= 36) // 假设完整数据包长度为5
        {
          
            if ( buffer[0]== 170 && buffer[ 1] == 170 && buffer[2] == 4)
            {

                byte[] packet = buffer.GetRange(0, 8).ToArray(); // 取出完整数据包
                buffer.RemoveRange(0, 8); // 从缓冲区中移除已处理的数据

                // 处理完整的数据包
                ProcessPacketRAW(packet);
            }
            else if (buffer[0] == 170 && buffer[1] == 170 && buffer[2] == 32)
            {

                byte[] packet = buffer.GetRange(0, 36).ToArray(); // 取出完整数据包
                buffer.RemoveRange(0, 36); // 从缓冲区中移除已处理的数据

                // 处理完整的数据包
                ProcessPacketMED(packet);
            }
            else
            {
              //  GameLogger.LogCyan($"缓冲大小: {buffer.Count },校验数据{buffer[0]}校验下一位 {buffer[ 1]}");
                buffer.RemoveRange(0,1); // 从缓冲区中移除已处理的数据
               
            }

        }

    }

  
      
   void ProcessPacketRAW(byte[] packet)
    {
     //  GameLogger.LogYellow("  packet RAW: " + BitConverter.ToString(packet));
    }

  void ProcessPacketMED(byte[] packet)
    {
      
      //  GameLogger.LogYellow("  packet RAW: " + BitConverter.ToString(packet));
      
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值