找回密码
 立即注册
查看: 478|回复: 0

Flutter中TCP通信——Protobuf安装和使用

[复制链接]
发表于 2021-11-21 16:01 | 显示全部楼层 |阅读模式
一.简介

flutter中使用protobuf的话,需要将proto文件转化成dart文件,我们需要借助官方编译工具进行编译。
二.安装protobuf

官放说Protocol Compiler是用C++编写的,使用它需要具备C++环境
安装C++:
sudo apt-get install autoconf automake libtool curl make g++ unzip安装ProtoBuf发行版:
如果你的是源码版,需要自己在编译一下
git clone https://github.com/protocolbuffers/protobuf.git  #下载源码
cd protobuf  
git submodule update --init --recursive   
./autogen.sh
发行版地址:


需要去下载对应的源码包,由于没有dart的包,我直接下载all包


下载完成之后,解压,进到目录中执行下面命令编译安装
./configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.这样Protocol Compiler就安装完成了


OK,我先试试,直接生成dart文件可不可以


GG,果然提示我们没有安装protoc-gen-dart插件,不慌,还在掌握之中,想要编成dart的话,是比编译成java麻烦一点点,编译成java直接下载个protobuf-java的包,执行命令就好了,但是dart的话,需要插件,那下面去下载dart-lang插件


下载完成之后,要执行
dart pub global activate protoc_plugin如果你没有安装dart和pub环境,这条命令是无法执行成功的,但是插件编译还依赖dart环境
所以先去安装dart环境
按照官网命令行安装就好了,但是网络原因,我apt有问题,所以我用deb安装
sudo dpkg -i dart_2.10.4-1_amd64.deb
export PATH="$PATH:/usr/lib/dart/bin"
dart --version


这样dart就安装好了,下面 pub清华源
然后,我们执行dart pub global activate protoc_plugin


如果出现:


直接执行:
export PATH="$PATH":"$HOME/.pub-cache/bin"然后重新Pub install就好了
截至到这时,我们支持编译成dart的protobuf算是安装完成了
三.使用

先搞个.proto文件试试,能不能生成dart文件


好像生成成功了


果然成功了,这下就弥补了公司转化protobuf的python脚本中不能转化dart的空白,等回头把这玩意加到公司的python脚本中,就完美了,也不算浪费了我两小时。
这四个文件都有自己不同的作用,只需要引用自己需要的就可以了,也可以全部引入,你要是讲究,我记得protobuf应该有参数设置。
代码中使用:
把生成好的文件复制到代码中


引入插件
protobuf: ^1.1.0  #使用protobuf调用
import 'package:flutterrobot/protobuf/b.pb.dart';

···  例子:我的b.pb.dart文件中放的是person类
    var p1 = person.create();
    p1.age=10;
    p1.country="100";
    var writeToBuffer = p1.writeToBuffer();
    print(writeToBuffer);

    var p2 = person.fromBuffer(writeToBuffer);
    print("年龄:${p2.age}");

···输出:


OK,完美,后续搭配之前的tcp通讯和自定义协议的格式,最后在放个CRC校验,一个数据帧就这样完成了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-15 04:27 , Processed in 0.135685 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表