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

news2024/10/1 21:30: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);
    }
    else
      byteArray.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.coloradmin.cn/o/1484745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mongodb 图形界面工具 -- Studio 3T(下载、安装、连接mongodb数据库)

目录 mongodb 图形界面工具 -- Studio 3T下载安装第一次使用&#xff1a;注册添加一个连接&#xff08;连接 mongodb 数据库&#xff09;1、点击【添加新连接】&#xff0c;选择【手动配置我的连接设置】2、对 Server 设置连接数据3、连接的用户认证设置&#xff08;创建数据库…

【系统分析师】-需求工程

一、需求工程 需求工程分为需求开发和需求管理。 需求开发&#xff1a;需求获取&#xff0c;需求分析&#xff0c;需求定义、需求验证。 需求管理&#xff1a;变更控制、版本控制、需求跟踪&#xff0c;需求状态跟踪。&#xff08;对需求基线的管理&#xff09; 1.1需求获取…

BUGKU 网站被黑

打开环境&#xff0c;什么都没发现&#xff0c;使用蚁剑扫描一下&#xff0c;发现shell.php&#xff0c;打开 使用BP抓包&#xff0c;进行爆破 得到密码&#xff1a;hack 进去得到flag

【python】1.python3.12.2和pycharm社区版的安装指南

欢迎来CILMY23的博客喔&#xff0c;本篇为【python】1.python3.12.2和pycharm社区版的安装指南&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 目录 一、python3.12.2的下载与安装 1.1下载 1.2安装 二、pycharm的安装 2.1下载安装 2…

Home-credit海外贷款信贷产品源码/线上贷款产品大全/贷款平台软件源码/海外借贷平台

测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c;开启ssl证书 语言&#xff1a;中文简体、英文 laravel框架的程序有点多&#xff0c;这个团队估计主要就是搞laravel开发的&#xff0c;基本上…

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

Leetcode630. 课程表 III

Every day a Leetcode 题目来源&#xff1a;630. 课程表 III 解法1&#xff1a;反悔贪心 经验告诉我们&#xff0c;在准备期末考试的时候&#xff0c;先考的课程先准备。同理&#xff0c;lastDay 越早的课程&#xff0c;应当越早上完。但是&#xff0c;有的课程 duration 比…

MATLAB环境下基于图像处理的计算病理学图像分割(MATLAB R2021B)

人工智能是病理学诊断和研究的重要新兴方法&#xff0c;其不仅可用于病理形态数据分析&#xff0c;还可整合免疫组化、分子检测数据和临床信息&#xff0c;得出综合的病理诊断报告&#xff0c;为患者提供预后信息和精准的药物治疗指导。计算病理学是病理学与AI、计算机视觉等信…

DSI2协议之BTA行为理解

概念: DSI协议spec支持总线控制权在master和slave之间发生交换,即通过bus turn around来实现; BUS TURN AROUND: BTA 的实现是通过controller—>cdphy的turnrequest信号来实现; 关于控制器发出turnrequest给phy,phy通过lvds/trio线输出turnaround sequence如下图中…

设计一基于Text generation web UI的语言模型部署与远程访问的方案​

前言 Text generation web UI可为类ChatGPT的大型语言模型提供能够快速上手的网页界面&#xff0c;不仅可以提高使用效率&#xff0c;还可满足私有化部署&#xff0c;或对模型进行自定义。目前&#xff0c;该Web UI已经支持了许多流行的语言模型&#xff0c;包括LLaMA、llama.…

ABAP - SALV教程06 - 列的设置(隐藏、修改、优化列宽)

SAVL要想像Function ALV或OO ALV那样设置Fieldcat&#xff0c;也是有方法的。通过取得全体列的类引用 CL_SALV_COLUMNS来进行修改 METHOD set_columns.* 取得全部列的对象DATA(lo_cols) co_alv->get_columns( ).* 设置自动优化列宽度lo_cols->set_optimize( X ).T…

js监听网页iframe里面元素变化其实就是监听iframe变化

想要监听网页里面iframe标签内容变化&#xff0c;需要通过监听网页dom元素变化&#xff0c;然后通过查询得到iframe标签&#xff0c;再通过iframe.contentWindow.document得到ifram内的document&#xff0c;然后再使用选择器得到body元素&#xff0c;有了body元素&#xff0c;就…

mamba-ssm安装building wheel卡着不动后error...避坑解决方法

文章目录 方法1、下载whl文件到本地后pip install安装成功后验证&#xff1a; 方法2、拉取Docker镜像 对于项目中用到MambaIR的小伙伴&#xff0c;需要pip安装 causal_conv1d和 mamba-ssm两个包及其依赖&#xff1a; torch packing transformersMambaIR-Github主页&#xff0…

【管理】管理岗位的通道:技术型PM,项目经理,管培生

【管理】管理岗位的通道&#xff1a;技术型PM&#xff0c;项目经理&#xff0c;管培生 文章目录 1、管理岗位什么是管理岗位互联网管理岗 2、项目经理&#xff08;互联网&#xff09;项目经理岗位要求项目经理 VS 程序员项目经理 VS 产品经理 3、市场销售&#xff08;管培生&am…

小实验:ESP32实现流水灯控制

文章目录 代码代码说明 ESP32提供了多路IO接口&#xff0c;下面的这个小试验实现了一个简单的流水灯控制&#xff0c;可以控制6个灯珠&#xff0c;当然也可以更多&#xff0c;可以根据情况增加和减少。 代码 将代码命名为main.py&#xff0c;上传到开发板&#xff0c;接好电路…

机器学习笔记 探索性数据分析(EDA) 中的配对图详述

一、介绍 在数据科学领域,理解和分析数据的第一步涉及全面的探索性数据分析(EDA)。这个过程对于识别模式、识别异常和建立假设至关重要。在 EDA 可用的众多工具中,配对图作为一种基本可视化技术脱颖而出,可提供多方面的数据视图。本文探讨了机器学习中的配对图,并解释了如…

springboot+vue学生网上请假系统

学生网上请假系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了学生网上请假系统的开发全过程。通过分析学生网上请假系统管理的不足&#xff0c;创建了一个计算机管理学生网上请假系统的方案。文章介绍了…

Mybatis plus扩展功能-Db静态工具

目录 1 前言 2 使用方法 2.1 Db静态工具拥有的部分方法 2.2 举例 1 前言 在我们的服务层中&#xff0c;有时为了实现一个方法需要引入其它的Mapper层方法&#xff0c;但是&#xff0c;这样可能出现循环依赖。虽然Spring已经给我们解决了简单的循环依赖问题&#xff0c;但是…

【硬件相关】RDMA网络类别及基础介绍

文章目录 一、前言1、RDMA网络协议2、TCP/IP网络协议 二、RDMA类别1、IB2、RoCE3、iWARP 三、RDMA对比1、优缺点说明a、性能b、扩展性c、维护难度 2、总结说明 一、前言 roce-vs-infiniband-vs-tcp-ip RoCE、IB和TCP等网络的基本知识及差异对比 分布式存储常见网络协议有TCP/IP…

使用Spark探索数据

需求分析 使用Spark来探索数据是一种高效处理大规模数据的方法&#xff0c;需要对数据进行加载、清洗和转换&#xff0c;选择合适的Spark组件进行数据处理和分析。需求分析包括确定数据分析的目的和问题、选择合适的Spark应用程序和算法、优化数据处理流程和性能、可视化和解释…