首页 > 学院 > 开发设计 > 正文

C# 使用google protocolbuffer协议

2019-11-17 02:20:37
字体:
来源:转载
供稿:网友

C# 使用google PRotocolbuffer协议

简介

google protocolbuffer,google 提供了三种语言的实现:java、c++和python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用xml进行数据交换快许多。

可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

以下介绍下C#使用protocolbuffer


下载protobuf-csharp-port-2.4.1.521-release-binaries.zip

http://code.google.com/p/protobuf-csharp-port/


proto 文件

//import "Base.proto"; 添加引用文件方式

package Proto;

message LoginRsp{ required int32 Result = 1;//0:失败,1:成功 optional bytes Cause = 2; optional bytes guid = 4;//唯一标识请求,可选}

required 必填项

optional 可选项

repeated list项


协议生成

把下载文件中的protoc.exe、ProtoGen.exe、Google.ProtocolBuffers.dll这些文件和bat文件、proto文件放入同一个文件夹

生成协议bat文件格式:

@echo onprotoc --descriptor_set_out=LoginRsp.protobin --include_imports LoginRsp.proto protogen LoginRsp.protobin

会在该文件中生成 LoginRsp.cs


生成要发送协议数据

Proto.LoginRsp.Builder builder = new Proto.LoginRsp.Builder();
builder.Result = 1;
builder.Cause = ByteString.CopyFrom(Cause, Encoding.Default);
builder.Guid= ByteString.CopyFrom(Guid, Encoding.Default); //string 转 ByteString , ByteString 是 Protocol buffer 的类型。byte[] sendData = builder.Build().ToByteArray();  //发送data

解析协议:

Proto.LoginRsp Rsp = Proto.LoginRsp.ParseFrom(netMsg);  //netMsg 生成的协议 byte[] sendData = builder.Build().ToByteArray();

StringConvertToByteString
public class StringConvertToByteString    {        public static ByteString ConvertToByteString(string text)        {            if (text != null)                return ByteString.CopyFrom(text, Encoding.Default);            else                return ByteString.Empty;        }        public static ByteString ConvertToByteString(string text, Encoding encoding)        {            if (text != null)                return ByteString.CopyFrom(text, Encoding.Default);            else                return ByteString.Empty;        }        public static string ConvertToString(ByteString text)        {            return text.ToString(Encoding.Default);        }        public static string ConvertToString(string value)        {            if (!string.IsNullOrEmpty(value))                return value;            else                return string.Empty;        }    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表