C#解析数据包

转自:https://blog.csdn.net/qq_31967569/article/details/83059501

解析消息体 从缓存里取出一个一个完整的数据包

public static byte[] Decode(ref List<byte> cache)
    {
        //首先要获取长度,整形4个字节,如果字节数不足4个字节
        if (cache.Count < 4)
        {
            return null;
        }
        //读取数据
        MemoryStream ms = new MemoryStream(cache.ToArray());
        BinaryReader br = new BinaryReader(ms);
        int len = br.ReadInt32();
        //根据长度,判断内容是否传递完毕, ms.Length - ms.Position为剩余流长度
        if ( ms.Length - ms.Position<len || len < 0)
        {
            return null;
        }
        //获取数据,读取4个字节数据
        byte[] result = br.ReadBytes(len);
        //清空消息池
        cache.Clear();
        //讲剩余没处理的消息存入消息池
        cache.AddRange(br.ReadBytes((int)ms.Length - (int)ms.Position));
        return result;
    }

BinaryReader.ReadBytes(Int32)

从当前流中读取指定的字节数以写入字节数组中,并将当前位置前移相应的字节数。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值