# protocol-buffers-multi-demo **Repository Path**: deng-yongsheng/protocol-buffers-multi-demo ## Basic Information - **Project Name**: protocol-buffers-multi-demo - **Description**: Protocol Buffers多种编程语言的例程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-12-15 - **Last Updated**: 2024-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 几种编程语言下的Protocol Buffers消息序列化和反序列 Protocol Buffers多种编程语言的例程,代码注释和文档比较粗糙 ## 编程语言 - [x] C,cmake管理,跨平台 - [x] C++,cmake管理,跨平台 - [ ] C# - [x] Dart - [x] Go - [x] Java,支持maven和Gradle - [x] Python - [x] Rust,使用prost库 - [x] TypeScript/JavaScript,使用React和Tailwind CSS,使用了一个自定义的支持表单验证的输入组件 - [ ] Scala ## 测试用例 ```protobuf syntax = "proto3"; option go_package = "dengyongsheng.cn/pb"; /*终端信息*/ message PB_DeviceInfo { string terminal_sn = 1; // 终端序列号 uint32 log_level = 2; // 日志级别 } /*客户端网络配置信息*/ message PB_NetInfo { bytes mac_addr = 1; // mac地址 bool use_dhcp = 2; // 是否使用dhcp uint32 ip = 3; // ip地址 uint32 gateway = 4; // 网关地址 uint32 subnet_mask = 5; // 子网掩码 uint32 dns = 6; // dns地址 } /*服务端配置信息*/ message PB_ServerInfo { string hostname = 1; // 服务器主机名 uint32 port = 2; // 服务器端口号,没有uint16类型,使用uint32代替 } /*服务端配置信息*/ message PB_TerninalConfigration { PB_DeviceInfo device_info = 1; // 设备信息 PB_NetInfo net_info = 2; // 网络信息 PB_ServerInfo server_info = 3; // 服务器信息 } ``` - 结构体/对象赋值 - 简单类型的赋值和修改 - 嵌套类型的赋值和修改 - 对象序列化 - 对象反序列化 ## 项目结构 ```text . ├── c │ ├── CMakeLists.txt │ ├── dump_hex │ │ ├── dump_hex.c │ │ └── dump_hex.h │ ├── main.c │ └── nanopb │ ├── config.pb.c │ ├── config.pb.h │ ├── pb_common.c │ ├── pb_common.h │ ├── pb_decode.c │ ├── pb_decode.h │ ├── pb_encode.c │ ├── pb_encode.h │ └── pb.h ├── config.proto ├── cpp │ ├── CMakeLists.txt │ ├── config.pb.cc │ ├── config.pb.h │ └── main.cpp ├── csharp ├── dart │ ├── analysis_options.yaml │ ├── bin │ │ └── proto_dart.dart │ ├── lib │ │ ├── config.pb.dart │ │ ├── config.pbenum.dart │ │ ├── config.pbjson.dart │ │ └── config.pbserver.dart │ ├── pubspec.lock │ ├── pubspec.yaml │ ├── README.md ├── generated │ └── config.ts ├── golang │ ├── config.pb.go │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── README.md ├── java │ ├── build.gradle │ ├── pom.xml │ ├── protobuf-java-3.19.1.jar │ ├── README.md │ └── src │ └── main │ ├── java │ └── cn │ └── dengyongsheng │ ├── Config.java │ └── ProtoBufTestApp.java ├── Makefile ├── python │ ├── config_pb2.py │ ├── main.py │ └── requirements.txt ├── README.md ├── rust │ ├── build.rs │ ├── Cargo.lock │ ├── Cargo.toml │ └── src │ ├── main.rs │ └── pb.rs └── typescript ├── dist.zip ├── README.md └── src ├── App.tsx ├── config.ts ├── utils.tsx └── ValidationInput.tsx ```