c# 服务端 使用 ProtoBuf 协议

今天写下 ProtoBuf c#版使用,觉得自己服务器暂时还是使用Protobuf来做网络通信协议吧,比较高效,轻便.如果使用Unity,也可以共同使用.等服务器框架搭建完成,就开始搭建客户端框架,后续应该会使用cocos-lua做客户端开发,后面会继续发lua使用的文章

还是老样子不解释太多,直接写代码,想深入了解其发展历程,原理等,可自行查询或参照官网!

 

1.首先要拿到这两个dll和一个exe

2.编写proto文件

这里我先写一个消息体结构,作为最上层统一传输结构.

//base.proto
//消息类型
enum msg_type
{
	test_type = 1;
}

//消息包
message base_message
{
	required msg_type 	_type 	= 1;
	optional bytes		_data 	= 2;
	optional uint32		_ecode 	= 3;
}

这里的msg_type可看作是交互的协议id

在写一个 test.proto

test.proto
//客户端->服务器
message c2s_test
{
	required string arg1 = 1; // (必要的)
	optional string arg2 = 2; // (可选的)
}

//服务器->客户端
message s2c_test
{
	optional uint32 arg2 = 1; // (可选的)
}

proto文件准备完成,接下来使用 protogen.exe 来生成c#文件

3.生成C#使用的.cs文件

我写了个.bat方便批量导出使用

set Path=E:\__MyWork\Server\Others\ProtoBuf\out

protogen base.proto --csharp_out=%Path%
protogen test.proto --csharp_out=%Path%

pause

双击运行:

这时候我们就有了两个cs文件  base.cs test.cs 导入到我们的vs中使用

4.在VS中使用

1.引入之前的两个dll到工程中

2.导入两个cs文件

3.开始写代码,我在一个工程里省去通讯的步骤,仅进行数据的encode和decode

//客户端
//1.encode
string str1 = "Client Send arg1!";
C2sTest c2s = new C2sTest()
{
    Arg1 = str1
};
MemoryStream ms = new MemoryStream();
ProtoBuf.Serializer.Serialize<C2sTest>(ms, c2s);

//2.在打包到继承的消息体
BaseMessage bm = new BaseMessage()
{
    Type = MsgType.TestType,
    Data = ms.ToArray(),
};

MemoryStream baseMs = new MemoryStream();
ProtoBuf.Serializer.Serialize<BaseMessage>(baseMs, bm);

//TODO 3.SendToServer()
Console.WriteLine("客户端发送数据: " + baseMs.Length);


//服务器
//1.decode
byte[] _data = baseMs.ToArray(); //服务器通过网络接收到的数据
MemoryStream server_basems = new MemoryStream(_data);
BaseMessage recvMsg = Serializer.Deserialize<BaseMessage>(server_basems);
Console.WriteLine("服务器接收到的类型:" +recvMsg.Type);
//2.这里可以根据传输协议的类型  做对应协议解析 
if(recvMsg.Type == MsgType.TestType)
{
    MemoryStream server_testms = new MemoryStream(recvMsg.Data);
    C2sTest testMsg = Serializer.Deserialize<C2sTest>(server_testms);
    //3.读取
    Console.WriteLine("服务器接收到的数据:" + testMsg.Arg1);
}

输出如下:

 

5.done

到这里基本就结束了,简单的编码解码过程,后面可以做相关扩展然后使用到项目中去.

下附资源文件,代码就不上传了,有问题请留言,尽量解答!

注:不需要积分.资源下载:https://download.csdn.net/download/zyxjx1314/12359778

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值