vs2005客户端和go server protobuf协议通信

目录

1 vs2005里使用protobuf

1.1 protobuf版本选择

1.2 编译libprotobuf和libprotoc两个项目

1.3 使用protobuf 

2  go里使用protobuf

2.1 编译proto文件

2.2 引入编译出的go文件


由于老项目用的是vs2005 C++,需要引入protobuf,记录下开发过程。

1 vs2005里使用protobuf

1.1 protobuf版本选择

由于从protobuf3.x开始,要求的vs编译器最低版本是vs2008,所以我们选择2.6.1版本,github上下载编译即可。

1.2 编译libprotobuf和libprotoc两个项目

  编译时注意选择运行时库的选择:

编译libprotoc的目的是为了使用protoc.exe来编译xx.proto文件生成对应的.h和.cc文件,你也可以直接下载编译好的protoc.exe.

1.3 使用protobuf 

使用前,我们需要先生成对应的.h和.cc文件,命令如下:

.\bin\protoc.exe --proto_path=./ protos/pvcs.proto --cpp_out=./cppFiles

然后把.h和.cc文件加入到项目,在vs项目里设置好libprotobuf库的头文件和库文件路径即可。

2  go里使用protobuf

2.1 编译proto文件

.\bin\protoc.exe --proto_path=./ protos/pvcs.proto --go_out=./goFiles

生成对应的go文件:pvcs.pb.go

注意:protobuf 2.6.1针对go生成的结构体成员都是指针类型的,例如:

proto文件内容:
message PVCSMsgHead{
    int32 cmd = 1;
	int32 reserved = 2;
	int32 size = 3;
}

生成的pvcs.pb.go里的对应信息如下:
type PVCSMsgHead struct {
	Cmd                  *int32   `protobuf:"varint,1,req,name=cmd" json:"cmd,omitempty"`
	Reserved             *int32   `protobuf:"varint,2,req,name=reserved" json:"reserved,omitempty"`
	Size                 *int32   `protobuf:"varint,3,req,name=size" json:"size,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

2.2 引入编译出的go文件

目前我看下来go在import时不支持相对路径,需要通过replace指令来进行替换引用。

比如我的项目结构如下:

GOPATH=SSO_PhoneVerifyCodeSrvV2, 代码在src目录,proto文件在protos目录,src目录下通过go mod init来管理依赖。

那么我们需要做以下三件事:

1)在src目录下的go.mod里加入replace指令:replace protos => ../protos

    

2) 在protos目录通过go mod init xx,也创建go.mod文件。

3) 在你项目的go文件import这个protos包和protobuf包,如下所示:

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net"

	"strconv"
	"unsafe"

	pvcs "protos"

	"github.com/golang/protobuf/proto"
)

这样你就可以在你的go项目里来使用pvcs.pb.go里的成员了。如下例子代码:

newRequestInfo := &pvcs.PVCSLoginRequest{}
	err := proto.Unmarshal(data, newRequestInfo)
	if err != nil {
		fmt.Println("err:", err)
		return
	}
	fmt.Println("n:", *newRequestInfo.N)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值