首页 > 其他分享 >LOL

LOL

时间:2024-12-30 15:59:05浏览次数:1  
标签:字节 int LOL buffer BitConverter byte public

先定义

public int recurCount = 0; // 数据包重发次数计数器(仅用于内部处理,非业务数据)
        public IPEndPoint endPoint; // 目标终端的IP地址和端口号

        // 数据包头部信息
        public int protoSize; // 业务数据的字节大小
        public int session; // 会话ID,用于标识客户端连接
        public int sn; // 序列号,用于消息排序和去重
        public int moduleID; // 模块ID,标识消息所属的功能模块
        public long time; // 发送时间戳
        public int messageType; // 消息类型(0:ACK确认包 1:业务消息包)
        public int messageID; // 消息ID,标识具体的协议号

        // 数据部分
        public byte[] proto; // 业务数据的字节数组(protobuf序列化后的数据)
        public byte[] buffer; // 完整的数据包字节数组(包含头部信息和业务数据)

构建请求报文

public BufferEntity(
            IPEndPoint endPoint,
            int session,
            int sn,
            int moduleID,
            int messageType,
            int messageID,
            byte[] proto
        )
        {
            protoSize = proto.Length; // 记录业务数据的大小
            this.endPoint = endPoint;
            this.session = session;
            this.sn = sn;
            this.moduleID = moduleID;
            this.messageType = messageType;
            this.messageID = messageID;
            this.proto = proto;
        }

编码接口,序列化

public byte[] Encoder(bool isAck)
        {
            // 创建固定大小的字节数组(头部32字节 + 业务数据大小)
            byte[] data = new byte[32 + protoSize];
            if (isAck == true)
            {
                protoSize = 0; // ACK包没有业务数据
            }
            // 将各字段转换为字节数组
            byte[] _length = BitConverter.GetBytes(protoSize);
            byte[] _session = BitConverter.GetBytes(session);
            byte[] _sn = BitConverter.GetBytes(sn);
            byte[] _moduleid = BitConverter.GetBytes(moduleID);
            byte[] _time = BitConverter.GetBytes(time);
            byte[] _messageType = BitConverter.GetBytes(messageType);
            byte[] _messageID = BitConverter.GetBytes(messageID);
            // 按照协议格式组装数据包
            Array.Copy(_length, 0, data, 0, 4); // 0-3字节: 业务数据长度
            Array.Copy(_session, 0, data, 4, 4); // 4-7字节: 会话ID
            Array.Copy(_sn, 0, data, 8, 4); // 8-11字节: 序列号
            Array.Copy(_moduleid, 0, data, 12, 4); // 12-15字节: 模块ID
            Array.Copy(_time, 0, data, 16, 8); // 16-23字节: 时间戳
            Array.Copy(_messageType, 0, data, 24, 4); // 24-27字节: 消息类型
            Array.Copy(_messageID, 0, data, 28, 4); // 28-31字节: 消息ID
            // 如果不是ACK包,追加业务数据
            if (!isAck)
            {
                Array.Copy(proto, 0, data, 32, proto.Length); // 32字节之后: 业务数据
            }
            buffer = data;
            return data;
        }

反序列

private void DeCode()
        {
            // 检查数据包是否至少包含长度字段(4字节)
            if (buffer.Length >= 4)
            {
                protoSize = BitConverter.ToInt32(buffer, 0); // 解析业务数据长度

                // 检查数据包是否完整(头部32字节 + 业务数据长度)
                if (buffer.Length == protoSize + 32)
                {
                    isFull = true;
                }
            }
            else
            {
                isFull = false;
                return;
            }

            // 解析头部各字段
            session = BitConverter.ToInt32(buffer, 4); // 会话ID
            sn = BitConverter.ToInt32(buffer, 8); // 序列号
            moduleID = BitConverter.ToInt32(buffer, 12); // 模块ID
            time = BitConverter.ToInt64(buffer, 16); // 时间戳
            messageType = BitConverter.ToInt32(buffer, 24); // 消息类型
            messageID = BitConverter.ToInt32(buffer, 28); // 消息ID

            // 如果不是ACK包,解析业务数据
            if (messageType != 0)
            {
                proto = new byte[protoSize];
                Array.Copy(buffer, 32, proto, 0, protoSize); // 复制业务数据
            }
        }

标签:字节,int,LOL,buffer,BitConverter,byte,public
From: https://www.cnblogs.com/dou66/p/18641450

相关文章

  • LOLBAS(Living Off the Land Binaries and Scripts)是指一种网络攻击技术,攻击者利用目标
    LOLBAS的英文全称是LivingOfftheLandBinariesandScripts。它指的是攻击者利用目标环境中已存在的合法二进制文件、脚本或工具来执行恶意活动的一系列技术和战术。这种方法通过使用操作系统或其软件中常见的工具和资源,避免了引入外部恶意软件或可疑的可执行文件,从而帮助攻......
  • 跨境翻译 luckyAI翻译WhatsApp翻译telegram自动翻译zaloline实时翻译
    WhatsApp全球普及,翻译助跨境电商畅聊商机,打破沟通国界。Telegram信息多元,自动翻译让行业资讯秒懂,把握前沿。Zalo与Line分占亚区市场,实时翻译助力深耕本地,拓展业务。在跨境电商领域,这类软件未来呈现多元趋势。功能上,翻译借助AI持续升级,精准解读专业术语、俗语,沟通更顺畅......
  • 桌面最小化窗口直接回到LOL[未解决]
    一、问题现状当LOL游戏存在时,alt+ecs等方式最小化,来到桌面。此时打开个记事本,再最小化,不会回到桌面,而是直接回到LOL游戏中。这个情况大概是23年七八月出现的,Win10|Win11好像都这样,其他系统没测二、解决方法没找到。。。三、分析窗口顺序正常情况1打开窗口1、窗口2、窗口3......
  • 易优CMS登录后台报Allowed memory size of 134217728 bytes ex hausted (tried to alo
    当你在登录后台时遇到“Allowedmemorysizeof134217728bytesexhausted(triedtoallocate20480bytes)”的错误提示时,通常是由于PHP的内存限制不足导致的。以下是一些具体的解决步骤:步骤1:检查PHP配置登录宝塔面板登录宝塔面板。在左侧菜单栏选择“软件商店”。......
  • Yololov5+Pyqt5+Opencv 实时城市积水报警系统
    在现代城市生活中,积水问题不仅影响交通和人们的日常生活,还可能对城市基础设施造成潜在的威胁。为了快速、准确地识别和应对积水问题,使用计算机视觉技术进行智能积水检测成为一个重要的解决方案。在这篇博客中,我将带你一步步实现一个基于YOLOv5的积水检测系统,帮助你轻松应对城市......
  • 《英雄联盟》游戏启动时闪退提示“缺少common.dll文件”该怎么处理?英雄联盟LOL游戏崩
    在启动《英雄联盟》时,如果闪退并提示“缺少common.dll文件”,您先别着急。可以通过重新安装游戏来解决,或者从官方渠道获取该文件并正确放置。也可以检查电脑的系统环境,修复相关问题,从而让您顺利进入游戏。本篇将为大家带来提示“缺少common.dll文件”修复方法的内容,感兴趣的小伙......
  • Python爬虫——Selenium方法爬取LOL页面
    文章目录Selenium介绍用Selenium方法爬取LOL每个英雄的图片及名字Selenium介绍Selenium是一个用于自动化Web应用程序测试的工具,但它同样可以被用来进行网页数据的抓取(爬虫)。Selenium通过模拟用户在浏览器中的操作(如点击、输入、滚动等)来与网页交互,并可以捕获网页的......
  • 英雄联盟d3dx9_39.dll丢失怎么修复?lol缺少dll文件的解决方法
    在享受《英雄联盟》(LeagueofLegends)的战斗之旅时,偶尔会遇到诸如“d3dx9_39.dll丢失”这样的错误提示,这可能会导致游戏无法启动。不要担心,这是一个相对常见的问题,通常与DirectX组件有关。以下是几种简单而有效的修复方法,一起来看看。1.使用DLL修复工具首先,下载DLL修复软......
  • 【Unity】HoloLens2 开发日记
    2022/1/12第一天!START!配置环境微软官方教程:练习-导入和配置资源-Learn|MicrosoftDocsWindows10SDK地址:WindowsSDK-Windows应用开发(microsoft.com)MRTK(混合现实工具包):DownloadMixedRealityFeatureToolfromOfficialMicrosoftDownloadCenter......
  • sololinker RV1106 SDK简单实用
    一、切换到sololinker/project$目录执行:./build.shusage查看项目配置信息及操作命令**************************************Check[OK]:dtc--version**************************************Check[OK]:makeinfo--version**************************************Check[O......