基于ProtoBuf协议实现网络传输(一)
来源:互联网 发布:太阳系比较模拟软件 编辑:程序博客网 时间:2024/05/21 08:21
Unity版本: 5.3
使用语言: C#
写在前面
ProtoBuf是Google公司推出的一种二进制序列化工具,适用于数据的网络传输。
基于Socket实现时时通信,关于数据粘包的编码和解码处理是必不可少的。
实现功能:
1.基于ProtoBuf序列化对象 2.使用Socket实现时时通信 3.数据包的编码和解码
1.Unity中使用ProtoBuf
- 导入DLL到Unity中
创建网络传输的模型类
using System;using ProtoBuf;//添加特性,表示可以被ProtoBuf工具序列化[ProtoContract]public class NetModel { //添加特性,表示该字段可以被序列化,1可以理解为下标 [ProtoMember(1)] public int ID; [ProtoMember(2)] public string Commit; [ProtoMember(3)] public string Message;}
在Unity中添加测试脚本,介绍ProtoBuf工具的使用。中间用到了流这个概念,对于此概念不熟悉的同学先去我的简书学习。
using System;using System.IO;public class Test : MonoBehaviour { void Start () { //创建对象 NetModel item = new NetModel(){ID = 1, Commit = "LanOu", Message = "Unity"}; //序列化对象 byte[] temp = Serialize(item); //ProtoBuf的优势一:小 Debug.Log(temp.Length); //反序列化为对象 NetModel result = DeSerialize(temp); Debug.Log(result.Message); } /// <summary> /// 将消息序列化为二进制的方法 /// </summary> /// <param name="model">要序列化的对象</param> private byte[] Serialize(NetModel model) { try { //涉及格式转换,需要用到流,将二进制序列化到流中 using (MemoryStream ms = new MemoryStream()) { //使用ProtoBuf工具的序列化方法 ProtoBuf.Serializer.Serialize<NetModel> (ms, model); //定义二级制数组,保存序列化后的结果 byte[] result = new byte[ms.Length]; //将流的位置设为0,起始点 ms.Position = 0; //将流中的内容读取到二进制数组中 ms.Read (result, 0, result.Length); return result; } } catch (Exception ex) { Debug.Log ("序列化失败: " + ex.ToString()); return null; } } /// <summary> /// 将收到的消息反序列化成对象 /// </summary> /// <returns>The serialize.</returns> /// <param name="msg">收到的消息.</param> private NetModel DeSerialize(byte[] msg) { try { using (MemoryStream ms = new MemoryStream()) { //将消息写入流中 ms.Write (msg, 0, msg.Length); //将流的位置归0 ms.Position = 0; //使用工具反序列化对象 NetModel result = ProtoBuf.Serializer.Deserialize<NetModel> (ms); return result; } } catch (Exception ex) { Debug.Log("反序列化失败: " + ex.ToString()); return null; } } }
0 0
- 基于ProtoBuf协议实现网络传输(一)
- 基于ProtoBuf协议实现网络传输(二)
- 基于ProtoBuf协议实现网络传输(三)
- ProtoBuf(protocol buffer) 网络传输协议
- 网络编程应用:基于TCP协议【实现对象传输】--练习
- App网络传输协议(Json、XML、protobuf)
- 基于SocketServer,实现一个FTP传输协议
- 网络传输层协议中,基于TCP/IP协议…
- 网络通信Socket+Protobuf协议
- c#基于RTP协议开发音频视频传输学习手记一
- 基于UDP高性能传输协议UDT doc翻译(一)
- 基于UDP高性能传输协议UDT doc翻译(一)
- 网络传输数据格式XML、JSON、ProtoBuf
- 常见网络传输协议
- 网络传输协议总结
- HTTP协议网络传输
- 网络视频传输协议
- 网络传输协议介绍
- XX平台tomcat中间件全局数据源配置
- 把HashMap按照key的自然顺序排序
- 定位方案
- 幸会
- Linux命令之wget
- 基于ProtoBuf协议实现网络传输(一)
- EditText输入限制:整数,小数,最大值,最大字符长度,手机号
- Codeforces Round #237 (Div. 2) D. Minesweeper 1D
- Java基础——注解(Annotation)
- 简单实现根据Td-idf实现语句相似度
- Ubuntu下开发BeagleBone Black所用工具软件
- sql子查询左链接
- 如何制作一个可控制的人体骨骼模型
- 352. Data Stream as Disjoint Intervals