准备工作
- 生成CA证书
|
|
公钥会需要填写信息, 主要有一个 Common Name
需要记录下来, 比如我填写的是 deploy
, 当然你可以填写任意字符串, 记下来就行.
36500表示100年有效, 自签证书就久一点好了
- 安装protobuf生成工具
|
|
安装完后, 终端输入protoc
可以输出帮助信息就准备完成了
服务端
- proto接口定义
新建一个go module项目, 创建proto目录, 再创建fs.proto文件. 如果IDE提示装插件就装上
|
|
- 生成 *.pb.go
|
|
会在proto目录下生成fs.pb.go
或者
让ide自动生成
- server.go
|
|
这样一个使用CA证书可传输大文件的grpc服务器就跑起来了
go客户端
|
|
主要需要注意的就是 Common Name
, NewClientTLSFromFile
的参数二, 这俩需要一样.
还有上下文的长度根据具体传输的文件大小还有网络状况而定
C# WinForm 客户端
-
依赖如下
-
拷贝fs.proto到解决方案下, 在安装了上图的
Grpc.Tools
之后, 选中fs.proto文件, 下方的生成操作
应该会多出一个Protobuf
, 选择这个, 重新生成下项目, 就可以在obj/Debug
下看到生成的Fs.cs
FsGrpc.cs
两个文件了 -
准备好一个比较大的压缩包(100M以上吧), 和上面生成的 server.crt, 上代码
|
|
遇到的坑和总结
- c# 的sha256需要做去
-
和转小写才可以和go的一样 - grpc生成的对应bytes的类型在go和c#中不一样, c#是Google.Protobuf.ByteString
- c#客户端中间有遇到一个
Stream removed
错误, 搜了一圈, 最终也不知道怎么解决的, 貌似重新运行了服务端就好了 - c#的依赖装完后可以都更新到最新版本, Grpc.Net.* 的包不是给WinForm用的, 好像是给.Net Core使用的, 一直无法安装, 我还以为是.Net版本太低了
- grpc默认的最大数据包大小为4M, 需要手动设置一下