udp客户端,对应服务端,发回的,登录相关,网络消息回包,处理逻辑,是打印log ![[Pasted image 20240418160819.png]] 对应服务端,发回的,背包相关,网络消息回包,处理逻辑,也是打印log ![[Pasted image 20240418160849.png]] ClientRecive函数接口,是客户端的[[await]]异步接收,服务端发过来网络消息的逻辑,也是调用常规的,解序列化DeSerialize接口,通过头部的cmd协议标识,调用,对应登录的 loginHandler 和背包的 bagHandler 处理响应逻辑 即可 ![[Pasted image 20240418160934.png]] 客户端的,逻辑根节点,也是声明一个udp客户端、登录和背包的Handler回包处理逻辑,对应服务器ip、单例instance和获取器 ![[Pasted image 20240418161250.png]] 客户端,Init初始化接口,完成各变量的初始化,也是通过[[Task]]创建ClientRecive的,消息接收任务 ![[Pasted image 20240418161342.png]] ReqLogin是客户端,请求登录的接口 ![[Pasted image 20240418161452.png]] ReqBag是客户端,请求背包数据的接口 ![[Pasted image 20240418161520.png]] 客户端对应的,Main主函数,调用对应,逻辑根节点的Init初始化,然后while死循环中,ReadLine监听输入,如果输入"login"就会发送,客户端登录请求; 如果输入"bag"就会发送,提取背包数据请求; ![[Pasted image 20240418161555.png]] 先后调试,服务端、客户端,对应log正常 ![[Pasted image 20240418161808.png]] ![[Pasted image 20240418161750.png]] 客户端,输入,回车 ![[Pasted image 20240418161822.png]] 服务端接收到请求→发回包→客户端接收到回包,打印log都正常 ![[Pasted image 20240418161908.png]] ![[Pasted image 20240418161921.png]] 继续测试背包,客户端,输入,回车,log都正常 ![[Pasted image 20240418161952.png]] ![[Pasted image 20240418162004.png]] ![[Pasted image 20240418162013.png]] 解析一下,Protobuf对应的.proto后缀文件,结构; 协议包名称自定义LogicProtocol,相关的修饰符,message协议、required字段 ![[Pasted image 20240418162214.png]] 继续,也有enum枚举 ![[Pasted image 20240418162418.png]] 继续,完成剩余的,数据包整体,构建,还有修饰符Optional,表示这是可选字段,可有可无 ![[Pasted image 20240418162434.png]] 参考[[protobuf的Required,Optional,Repeated限定修饰符]]即可 对应的run.bat批处理文件,所在路径 ![[Pasted image 20240418164721.png]] 批处理脚本逻辑,会调用soft目录的protogen.exe可执行程序,将NetProtocol.proto协议文件,解析成脚本逻辑文件; C#相关的,输出路径是,回到上层目录,然后再前往,仨文件夹,分别对应:UDP客户端、UDP服务端、unity客户端的Asset目录对应的文件夹; 还有一个是java相关的,会输出到,java服务器的相关路径; ![[Pasted image 20240418164701.png]] 双击运行,log显示,生成脚本正常 ![[Pasted image 20240418165120.png]] 对应生成路径,也正常 ![[Pasted image 20240418165155.png]] ![[Pasted image 20240418165210.png]] 服务端,对应protobuf的,登录请求回调,调用的是,对应protobuf的逻辑根节点,包含的SendMsg发送消息接口 ![[Pasted image 20240418165335.png]] protobuf的逻辑根节点,对应的SendMsg发送消息逻辑接口,使用的是,protobuf内部的Serializer序列化逻辑 ![[Pasted image 20240418165424.png]] ![[Pasted image 20240418165537.png]] 服务端,protobuf对应的,背包请求,同理 ![[Pasted image 20240418165602.png]] protobuf逻辑根节点,跟常规的基本一致,只是更换了Serializer序列化相关机制 ![[Pasted image 20240418165655.png]] ![[Pasted image 20240418165732.png]] 修改服务端调用 ![[Pasted image 20240418165802.png]] 客户端对应protobuf的脚本,同理 ![[Pasted image 20240418165841.png]] 修改调用,同理 ![[Pasted image 20240418165901.png]] 调试服务端+客户端,log正常 ![[Pasted image 20240418170037.png]] ![[Pasted image 20240418170049.png]] 打开unity客户端,这是挂载的脚本 ![[Pasted image 20240418170204.png]] 文件结构,和客户端实例,基本相同 ![[Pasted image 20240418170234.png]] Start开始函数,主要修改一下,对应的ip即可 ![[Pasted image 20240418170304.png]] Update更新函数,输入L是登录请求,输入B是背包请求 ![[Pasted image 20240418170333.png]] 运行游戏,输入L和B,回包log打印,正常 ![[Pasted image 20240418170412.png]] 服务端log,也正常 ![[Pasted image 20240418170431.png]]