msg.proto
syntax = "proto3";
package MSG;
option go_package = ".;MSG";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
}
//protoc --go_out=./ ./msg.proto
//protoc --cpp_out=./ ./msg.proto
- func Marshal(m Message) ([]byte, error)
- func Unmarshal(b []byte, m Message) error
- type Message = protoreflect.ProtoMessage
- type ProtoMessage interface{ ProtoReflect() Message }
go_server.go
/*
func (m selfMarshaler) Marshal() ([]byte, error)
func (m *selfMarshaler) Unmarshal(b []byte) error
*/
package main
import (
"MSG"
"fmt"
//"github.com/golang/protobuf/proto"
"net"
"os"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
)
func main() {
serve, err := net.Listen("tcp", "127.0.0.1:9999")
if err != nil {
fmt.Println("Error: %s", err.Error())
os.Exit(1)
}
fmt.Println("listen on 127.0.0.1:9999")
for {
conn, err := serve.Accept() // 建立连接
if err != nil {
fmt.Println("accept failed, err:", err)
continue
}
fmt.Printf("new client %s %d\n", conn.RemoteAddr().(*net.TCPAddr).IP,
conn.RemoteAddr().(*net.TCPAddr).Port

本文介绍如何利用Go和C++通过protobuf进行TCP通信。内容包括msg.proto文件定义,Go端的go_server.go和go_client.go实现,以及C++端的cpp_server.cpp代码。编译过程也进行了说明。
最低0.47元/天 解锁文章
2638

被折叠的 条评论
为什么被折叠?



