Moba项目开发(一)打造网络通信系统-任务11:11.保证报文完整性的处理

1.在BufferEntity解码的时候,先判断包体的大小:

1)若大于4则继续往下走,否则都是直接返回,
2)再判断除了包体大小,数据包是否还有32个字节,若有,表示包体是完整的

            //先判断包体的大小
            if (buffer.Length>=4)
            {
                //字节数组转化成int或者是long
                protoSize = BitConverter.ToInt32(buffer, 0);    //从0的位置,取四个字节转成int
                //若数据是完整的,改变isFull为true,表示收到的包是完整的
                if(buffer.Length == protoSize + 32)
                {
                    isFull = true;
                }
            }
            else
            {
                isFull = false;
                return;
            }

2.将发送ACK报文的业务数据包大小置为0

            //如果是ACK的话,包体大小应为0,业务数据大小为0
            if(isAck == true)
            {
                protoSize = 0;//发送的业务数据的大小
            }

3.处理业务逻辑时,先判断包体大小是否是完整的

                    //包体完整才进行业务逻辑的处理
                    if (bufferEntity.isFull)
                    {
                        //打印一下处理消息
                        //$能使消息格式化
                        Debug.Log($"处理消息,id:{bufferEntity.messageID}");
                        //处理业务逻辑
                        local.Handle(bufferEntity);
                    }

完整代码

        //在Updata里面进行调用,服务器可以开线程循环调用
        //处理报文的接口
        public void Handle()
        {
            if (awaitHandle.Count > 0)
            {
                UdpReceiveResult data;
                //若队列不为空,从中取出数据
                if (awaitHandle.TryDequeue(out data)
                {
                    //先反序列化一下收到的数据,存到data.Buffer里面,这个是个字节数组
                    //传递给local
                    BufferEntity bufferEntity = new BufferEntity(data.RemoteEndPoint, data.Buffer);
                    //包体完整才进行业务逻辑的处理
                    if (bufferEntity.isFull)
                    {
                        //打印一下处理消息
                        //$能使消息格式化
                        Debug.Log($"处理消息,id:{bufferEntity.messageID}");
                        //处理业务逻辑
                        local.Handle(bufferEntity);
                    }
                }
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值