本文摘自PHP中文网,作者零下一度,侵删。
版权声明:本文为原创文章,转载请声明 近期在做一个棋牌项目,需要用到socket传输protobuf字节流,在网上找了一些博客和文章后发现,没有特别全面的,所以把自己研究的全部源码拿出来和大家分享,因为刚开始做,可能会有不足的地方,欢迎拍砖~~
这一篇主要是protocol buffer文件的序列化和解析,废话不多说了,直接上干货
protobuf文件中的每一条message经过protocol buffer提供的ProtoGen工具可以转成c#的中的类,例如
1 2 3 4 | message Test {
required string test1= 1;
required string test2= 2;
}
|
经过转化后就变成了
1 2 | 1 [ global ::System.Serializable, global ::ProtoBuf.ProtoContract(Name=@ "SedReq" )] 2 public partial class Test : global ::ProtoBuf.IExtensible 3 { 4 public Test() {} 5 6 private string _test1; 7 [ global ::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@ "test1" , DataFormat = global ::ProtoBuf.DataFormat.Default)] 8 public string test1 9 {10 get { return _test1; }11 set { _test1 = value; }12 }
13 private string _test2;14 [ global ::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@ "test2" , DataFormat = global ::ProtoBuf.DataFormat.Default)]15 public string test216 {17 get { return _test2; }18 set { _test2 = value; }19 }20 private global ::ProtoBuf.IExtension extensionObject;21 global ::ProtoBuf.IExtension global ::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)22 { return global ::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }23 }
|
无视所有带global的代码,你会发现,转化后的c#类和一个标准的c#实体类一模一样,并且,这些转化后的类都继承至ProtoBuf.IExtensible,所以上文中的序列化函数的参数的类型是IExtensible
有了序列化,当然还需要反序列化,也就是讲byte[]反序列化为继承至IExtensible的类型的对象
因为反序列化后的对象是继承至IExtensible的类的对象,所以返回值必须使用泛型约束来定义,这样才能保证函数的通用性
工具搞定,接下来就是测试代码了
1 | 1 public void Test()2 {3 Test test = new Test() { test1 = "123" , test2 = "456" };4 byte[] bytes = Serialize(test);5 Test test2 = DeSerialize<Test>(bytes);6 Debug.Log(test2.test1 + test2.test2);7 }
|
输出结果 123456
附上protobuf-net.dll文件
预编译和转化工具
以上就是socket传输protobuf字节流实例教程的详细内容!
相关阅读 >>
利用unity脚本自定义分辨率实现相机截一张高清截图
.net中core使用socket与树莓派进行通信的实例分析(图文)
c#的socket实现udp协议通信的示例代码详解
通达oa 使用c#的socket编程来其替代原有操作的示例代码分享
详解.net core使用socket与树莓派进行通信
c#使用socket创建一个小型的web server代码分享
unity c# getsavefilename()的实例详解
socket传输protobuf字节流实例教程
c# socket实现简单控制台案例
unity实现脚本插件[script create dialog]图文详解
更多相关阅读请进入《protobuf》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » socket传输protobuf字节流实例教程