unity学习(44)——选择角色菜单——顺利收到服务器的数据

本节的思路参考自,内容并不相同:13ARPG网络游戏编程实践(十三):角色选择UI及创建面板制作(四)_哔哩哔哩_bilibili

 现在的代码写在MessageManager.cs中,函数名UserHandler(是从OnMessage跳过来的):

点击确定注册按钮后,客户端收到了如下数据包:

这里问题其实挺多的,账号信息要写到文件里(出字典的时候) 。。。一点点来吧,顺利的化,和注册部分的难度是持平的。

1.客户端确实收到了数据包!

2.但并没有把数据包加到List中。原因是因为长度有问题,大概率还是大小端导致的!

而且unity中Debug.Log("怎么都让我赶上了1");如果是纯字符串,有的时候是不会输出的

3.先去服务器查看一下包的组成是否有问题:服务器的UserHandler中如下代码已正常执行:

private void create(Session session, SocketModel model)
{Console.WriteLine("UserHandler.create!!!!!!!!!");string accId = OnLineUtil.getAccId(session);Console.WriteLine(accId);CreateDTO createDto = Coding<CreateDTO>.decode(model.Message);Console.WriteLine(model.Message);session.write(2, 0, 3, (object) BizUtil.user.create(accId, createDto.name, createDto.job));//本意是给对应键的部分增加2个值,而现在却查不到键
}

4.session.write的作用就是向客户端发送数据包,最后发现是这里的num1为空出了问题。

  public void write(int type, int area, int command, object message){SocketModel socketModel = new SocketModel(type, area, command, (string) null);if (message != null)socketModel.Message = Coding<object>.encode(message);int num1 = 16;if (socketModel.Message != null)num1 += socketModel.Message.Length;ByteArray byteArray = new ByteArray();Console.WriteLine("num1:", num1);//都不是事byteArray.WriteInt(num1);byteArray.WriteInt(socketModel.Type);byteArray.WriteInt(socketModel.Area);byteArray.WriteInt(socketModel.Command);if (socketModel.Message != null){int num2 = num1 + socketModel.Message.Length;byteArray.WriteInt(socketModel.Message.Length);byteArray.WriteUTFBytes(socketModel.Message);}elsebyteArray.WriteInt(0);this.socket.Send(byteArray.Buffer);Console.WriteLine("session.write返回给客户端的消息长度" + (object)byteArray.Buffer.Length);foreach (byte b in byteArray.Buffer){Console.Write(b.ToString("x2"));//是不是还有个大小端的问题}Console.WriteLine(byteArray.Buffer.ToString());//MyLog.form.textAdd("消息长度" + (object) byteArray.Buffer.Length);}
}

5.重启服务器一下却没问题了,客户端得到了预期的结果

6.至于num1是空的原因,是因为Console.WriteLine中用“+”来输出多出,而不是“,”

7.239长度的数据包是userHandler中如下代码部分生成的:

private void create(Session session, SocketModel model)
{Console.WriteLine("UserHandler.create!!!!!!!!!");string accId = OnLineUtil.getAccId(session);Console.WriteLine(accId);CreateDTO createDto = Coding<CreateDTO>.decode(model.Message);Console.WriteLine(model.Message);session.write(2, 0, 3, (object) BizUtil.user.create(accId, createDto.name, createDto.job));//本意是给对应键的部分增加2个值,而现在却查不到键
}

里面包含了: 游戏角色的必要信息

{"id":"af2492c3-621b-4af8-96cb-1e599c9d4db2","name":"ddd556\u200B","job":1,"level":1,"exp":0,"atk":10,"def":5,"hp":50,"maxHp":50,"point":{"X":-2.21,"Y":13.83,"Z":7.5},"rotation":{"X":0.0,"Y":0.0,"Z":0.0,"W":0.0},"map":2}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505711.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA *数据库连接池 * 接JDBC

一.介绍: 数据库连接池实际上就是一个 " 容器 " 当有多个拥护需要访问数据库的时候, 一个用户会打开一个数据库连接, 但是!当用户离开的时候,就会断开数据库连接,那么数据库连接就作废了,之后如果还有用户需要进行访问,需要再建立一个数据库连接......循环往复, …

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 &#xff08;1&#xff09;获取字符串长度 &#xff08;2&am…

聚观早报 | 2024款腾势D9将发布;岚图汽车2月销量

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月2日消息 2024款腾势D9将发布 岚图汽车2月销量 苹果Vision Pro防汗新专利 真我12 Pro正式开售 Redmi K70/Pro…

Java面试——Redis

优质博文&#xff1a;IT-BLOG-CN 一、Redis 为什么那么快 【1】完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;非常快速。数据存在内存中。 【2】数据结构简单&#xff0c;对数据操作也简单&#xff0c;Redis中的数据结构是专门进行设计的。 【3】采用单线…

win11系统中nginx简单的代理配置

一.背景 为了公司安排的师带徒任务。 操作系统版本&#xff1a;win11家庭版 nginx版本&#xff1a;1.24.0 二.配置代理 之前文章已经说明了nginx简单的安装&#xff0c;要看阅读这个文章哈。web服务器nginx下载及在win11的安装-CSDN博客 1.配置需求识别 前端服务nginx(80…

web开发:如何用Echarts来自动给网页设计各种统计图

很多时候web开发也会需要用到统计图&#xff0c;如果单纯靠我们自己那点拙劣的css和js水平设计的话&#xff0c;又耗时间又做得跟史一样&#xff0c;这时候就需要引入别人设计师为我们设计好的动态统计图——echarts Echarts的官网是&#xff1a;Apache ECharts 1、第一步&…

从下一代车规MCU厘清存储器的发展(1)

目录 1.车规MCU制程工艺朝28nm进发 2.MCU存储器概述 3.MCU大厂的选择 3.1 瑞萨自研STT-MRAM 3.2 ST专注PCM 3.3 英飞凌和台积电联手RRAM 3.4 NXP如何计划eNVM 4.小结 1.车规MCU制程工艺朝28nm进发 随着英飞凌发布了关于AURIX TC4xx系列即将量产的新闻&#xff0c;国际…

基于yolov8与pyqt5的火焰烟雾实时检测系统设计

界面 权重&#xff1a;可以选择自己训练的yolov8模型&#xff0c;也可以用一些改进的yolov8模型作为系统的权重。 功能&#xff1a;单张图片的检测&#xff0c;视频文件的检测&#xff0c;多张图片同时检测&#xff0c;以及摄像头实时检测。 调整&#xff1a;可以调整置信度&…

XSS初级漏洞靶场

一、环境的搭建 可以在githb上找靶机包&#xff0c;使用小皮面板搭建在自己本机 与此文章类似&#xff08;放在www目录下&#xff09; 二、XSS漏洞简介 1、什么是xss漏洞 当用户访问被xss注入的网页&#xff0c;xss代码就会被提取出来。用户浏览器就会解析这段xss代码&…

FNM和SFNM的区别

看图说话。 级联模式下&#xff0c;FNM模式&#xff0c;从片的中断都是同一个级别&#xff0c;因此从片如果有多个中断发生&#xff0c;中断之间不会抢占&#xff0c;只能按顺序处理。 级连模式下&#xff0c;SFNM模式&#xff0c;从片中断有优先级的区别&#xff0c;高优先级…

选购墨水屏电子会议桌牌的技巧分享

在现代商务会议中&#xff0c;电子会议桌牌已经成为了不可或缺的工具。而在众多电子会议桌牌中&#xff0c;墨水屏电子会议桌牌因其独特的显示效果和节能特性受到了广泛关注。那么&#xff0c;面对市场上琳琅满目的产品&#xff0c;深圳金之桥信息如何选择一款适合自己的墨水屏…

Redis源码安装教程来喽~

一.下载 Index of /releases/ [rootserver ~]# wget --no-check-certificate http://download.redis.io/releases/redis-6.2.7.tar.gz二.解压 [rootserver ~]# tar xf redis-6.2.7.tar.gz -C /usr/local/ [rootserver ~]# cd /usr/local [rootserver local]# ll 总用量 44K …