位置: 编程技术 - 正文

网络游戏数据传输:粘包的处理(网络游戏数据包)

编辑:rootadmin
网络传输大体上包含这四个协议type area command message,这四层协议是依次向下传递的。所谓协议,说简单点就是服务器端和客户端的一个约定,比如,向服务器发送(1,0,1,“账号:*** 密码***”)约定type中1代表登录模块,因为登陆不需要经过area协议,所以跳过area协议,直接到command协议,command中1代表登陆,2代表注册,3代表返回登陆结果,传入的是1,故进行登陆逻辑,注意,如果type不是1,此处1,2,3就会代表别的东西了。如果登陆成功,服务器会返回(1,0,3,“true”)如果不嫌麻烦,完全可以只定义一个协议,但是估计没人那么做在传输过程中,为了进行高效的传输,所有的数据都会连在一起,如果传的是int a = 1 string b = “qaz”传输时会变成1qaz为了进行区分,通常会在传输数据体前用一个8字节的int传入这个数据体的长度(一般一个int就占8个字节),这个int通常叫做数据头如果想传的数据占个字节,那么传的时候会发送&#;8个字节如果想发送一个float和一个bool,那么真正发送的会是连在一起的int float int bool下面说下如何进行解析在连接服务器后,用BeginReceive进行数据接收,其中一个参数定义了缓存大小建立一个字节数组byte[]来作为缓存建立一个ByteArray来存储待处理数据,ByteArray是可以改变大小的当缓存中收到数据时,会将数据加入到ByteArray之后,判断是否正在进行数据处理,如果没在则开始数据处理:↓判断ByteArray长度是否大于8,即是否把记录消息体长度的int读取完若小于8,不做处理等待,下次接受若大于8,使用ReadInt读取IntByteArray有一个position属性,默认为0,当执行readint时会从0下标读到8下标,因为int字节长度为8,所以就算ByteArray里有很多数据,就算有个字节,readint也只会读8位,之后position=8举个例子,如果传入 1,2,3三个int 连续执行3次ReadInt就会得到1,2,3获取数据体长度int L后,再判断剩下的数据长度是否大于L,若大于则说明数据完整,建立新的ArrayList2,从ArrayList读取8到8&#;L的内容,AL的position&#;L对ArrayList2进行Read,至于是ReadInt还是ReadBytes,要按照协议进行,简而言之,服务器传的顺序要和收的顺序一致之后,我们创建一个新的缓存来存储ListArray position之后的数据,再使ArrayList=这个新缓存

推荐整理分享网络游戏数据传输:粘包的处理(网络游戏数据包),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:网络游戏传输原理,网络游戏数据存在哪里,网络游戏传输原理,网络游戏传输原理,网络游戏数据传输方法,网络游戏数据传输方法,网络游戏数据传输方式,网络游戏数据传输方式,内容如对您有帮助,希望把文章链接给更多的朋友!

再次执行"↓"之后的内容

网络游戏数据传输:粘包的处理(网络游戏数据包)

相关代码:

//消息体长度为一个8字节数&#; 长度不足的时候 说明消息未接收完成 或者是废弃消息 if (ioBuff.Length < 8) { isRead = false; return; } //读取定义的消息的长度 int dataSize = ioBuff.ReadInt(); if (dataSize > ioBuff.Length - 8) { //消息体长度不够 等待下个消息的到来 ioBuff.Postion = 0; isRead = false; return; } //创建完整消息体的动态数组 ByteArray ioData = new ByteArray(); //从消息缓存中取出正确的消息体 字节数组内容 ioData.WriteBytes(ioBuff.Buffer, 8, dataSize); ioBuff.Postion &#;= dataSize; int type=ioData.ReadInt(); int area=ioData.ReadInt(); int command=ioData.ReadInt(); byte[] cache=ioData.ReadBytes(); object message = AceCode.Code.aceDecode(cache); //转换为传输模型用于使用 SocketModel model = new SocketModel(type, area, command, message); //将消息存储进消息列表 等待Unity来读取 messageList.Add(model); //// //创建新缓存区 ByteArray bytes = new ByteArray(); //将旧缓存区的剩余数据移动到新缓存区 bytes.WriteBytes(ioBuff.Buffer, ioBuff.Postion, ioBuff.Buffer.Length - ioBuff.Postion); //更新缓存区 ioBuff = bytes; onData();

[置顶] uGUI元素显示在角色的头顶上 孙广东.5.转载请注明出处:

[置顶] (八)Unity5.0新特性------IL2CPP Internals: 生成的代码之旅 孙广东.5.转载请注明出处吧这是IL2CPPInternals系列中的第二个博客文章。在这篇文章,我们将探讨由il2cpp.exe生成的c++代码。一路走来,我们将看

Unity3d 物理碰撞de那点事(不是触发) 还是那句话大神勿喷不喜勿喷若有不对的地方欢迎指正欢迎拍砖。。。OK!!其余的废话就不多说的了直接进入正题。那么,今天要讲碰撞,碰撞碰撞,

标签: 网络游戏数据包

本文链接地址:https://www.jiuchutong.com/biancheng/375682.html 转载请保留说明!

上一篇:【猫猫的Unity Shader之旅】之Blend语句(猫的游戏解说)

下一篇:[置顶] uGUI元素显示在角色的头顶上([置顶]从lv2开始开挂的原勇者候悠闲的异世界生活)

  • 劳务派遣公司需要给员工缴纳社保吗
  • 报税显示缺少组件怎么办
  • 收到商业汇票计入科目
  • 钢铁租赁公司
  • 采购成本和销售费用区别
  • 购进货物未取得增值税专用发票可以抵扣进项税额吗
  • 企业所得税申报时间
  • 注册资本需要实交吗
  • 企业电子支付
  • 进项税额转出怎么算
  • 经营活动现金净流量公式
  • 预交增值税设备租赁是否可抵扣
  • 外贸企业的会计
  • 票据贴现利息费用计入
  • 一台设备分期开票数量
  • 贷款利息收入要减去支付利息支出吗
  • 承包方收取分包方费用
  • 18年补交17年城建税会计分录
  • 开具增值税专用发票的要求
  • 定额发票用来干嘛
  • 预警税负率表
  • 银行承兑汇票盖已承兑登记
  • 房地产预售阶段增值税进项
  • 建筑工程确认收入条件
  • 产品研发费用计入什么科目
  • 金税盘增值税减免税申报明细表怎么填
  • 因为质量问题
  • 有哪些凭证
  • 商家收白条
  • 货物赔偿款会计分录
  • 收取违约金如何入账
  • vbs win10
  • 防伪税控开票系统技术维护费
  • php自定义变量
  • 公司收到预付款怎么用处去
  • 补提去年的所得税费用是怎么做分录?
  • 一般纳税人使用的是什么会计准则
  • 前端搭建项目
  • 浅谈php中的错误处理方法
  • 分配股利账务处理
  • ajax调用php接口
  • php guzzle 异步
  • 进项税已认证未缴纳
  • web前端面试题目
  • setenforce 0命令
  • 增值税发票认证不了怎么回事
  • 代扣代缴境外增值税时间
  • 提前开具发票怎么做账
  • java默认访问权限修饰符
  • 企业进行存货清查时,对于盘亏的存货
  • 什么情况下增值税进项税额转出
  • 年终奖可以税前扣除吗
  • 小规模教育培训怎样纳税
  • 购买理财产品如何防诈骗
  • 进项发票认证后暂不抵扣
  • 进项税加计抵减的分录怎么做?
  • 装修费未计入长期费用
  • 超过社保基数的工资怎么发放
  • 购买二氧化氯
  • 销售收入确认后怎么处理
  • 水利建设基金筹集和使用管理办法
  • 出差补贴应该怎么入账
  • 递延所得税资产账务处理
  • Linux/UNIX和Window平台上安装Mysql
  • 微软股票
  • 解析包错误怎么解除
  • 借助竹子赞美人物气节的诗句有哪些
  • ubuntu虚拟机与windows共享文件
  • swimsuitnetwork.exe - swimsuitnetwork是什么进程 有何作用
  • window102021年更新计划
  • win10如何恢复已删除的密钥
  • win7系统按Ctrl+Shift不能切换输入法的图文教程
  • root什么玩意
  • DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
  • 八大排序算法的时间空间复杂度
  • javascript HTML+CSS实现经典橙色导航菜单
  • javascript基于什么的语言
  • python搭建网页
  • java 视频教程
  • 电力行业增值税管理办法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设