Protobuf开发之java和c#通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chy_xfn/article/details/51996216

(1)首先将protobuf的.proto文件生成.java文件

1、将写好的.proto文件和protoc.exe(无则去下载)文件放在同一文件夹内;

2、启动cmd.exe程序,cd到上1两文件所在文件夹中,输入命令protoc.exe --java_out=./ LoginProto.proto(注意./和L中间有一个空格)后回车,成功后就会在当前文件夹下生成一个LoginProto.java文件;

3、通常我们会在java项目中使用protobuf协议,所以我们可以在java项目中创建一个tools文件夹用来存放我们的自己写的protobuf文件和protoc.exe工具,那么可以这样使用;

option java_package="com.xfn.prototest"; // 创建一个包存放.proto文件生成的.java文件
option java_outer_classname="FirstProtoTest"; // 指定生成的文件名为FirstProtoTest
message Login{
	optional string account =1;
	optional string password =2;
	optional int32 id =3;
	optional string token =4;	
}
message GMsg{
	optional int32 evt =1;
	optional bytes body =2;
	optional string tips =3;
}
 
 如上面我自己写的一个protobuf文件,我只要在cmd中cd到tools文件夹下,输入命令 
 

protoc ./LoginProto.proto --java_out=../src/

(注意不要有多余的空格),成功后会在src文件下创建一个com.xfn.prototest包和里面的FirstProto.java文件;

4、要想将生成的文件在java项目中使用,还得借助protobuf的jar(如:protobuf-java-2.4.1.jar)提供的方法;

如果使用jar包出现“This is supposed to be overridden by subclasses.”错误,可能是版本问题;

(2)将.proto文件生成.cs文件供C#使用

1、下载protobuf的C#版开发包,找到ProtoGen\bin\Debug文件夹下的protogen.exe文件(注意:有些下载的没有该文件,需要运行项目跑下),同时里面还有个protobuf-net.dll文件,类似jar包,只不过这个是要导入C#项目的;

2、将我们的.proto文件放入和protogen.exe一起,还是用cmd,cd到该文件夹下,输入命令回车:

protogen -i:LoginProto.proto -o:my.cs(注意;不同版本命令可能不一样,这里为2.x)

成功后悔生成相应的.cs文件;

(3)最后,使用技巧(后期不断补充)

1、主要变量类型声明为Optional(可选字段)和Required(必选地段),使用第二个声明的,在实际使用中如果用到该类,则该字段必须初始化,否则会出错,但多数我们是用来接收数据,并不一定需要初始化化,故使用第一个;

2、序列化和反序列化:如上面写的.proto文件内容,当我们需要前后端传递数据时,我们new一个Login类,往里面放入数据,这是一个类,而我们前后端通信传递数据用的是字节流形式,所以我们有声明了一个GMsg类,里面有一个byte数组body字段,就是用来携带我们要传送的数据,然而将我们的自定义类Login转为body这一过程就是序列化过程,反之接收方将body转化为Login则是反序列化过程,这样无论我们创建各种类来保存数据都可以通过这个body传送;java和C#两者的序列化和反序列化函数不同,自行查询资料。

猜你喜欢

转载自blog.csdn.net/chy_xfn/article/details/51996216