【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )

举报
韩曙亮 发表于 2022/01/11 01:30:23 2022/01/11
【摘要】 文章目录 一、TCP 粘包和分包二、TCP 粘包和分包解决方案三、客户端 Android 应用使用 Protobuf四、服务器端 Java 服务器使用 Protobuf五、参考资料 ...





一、TCP 粘包和分包



TCP 传输中的 粘包 和 分包 情况 :

分包 : 发送的数据量过大 , 大于 TCP 发送缓冲区的剩余空间 , 则产生分包 ; 发送的数据量大于 TCP 最大报文长度 , 也会产生分包 ;

粘包 : 发送的数据量过小 , 小于 TCP 发送缓冲区剩余空间大小 , TCP 机制会将多次写入缓冲区的数据 , 一次性发送出去 , 这样就产生了粘包的情况 ; 接收端如果没有及时读取接收缓冲区中的数据 , 也会造成粘包情况 ;

TCP 开发中 , 粘包和分包是必然出现的 , 无法避免 ;





二、TCP 粘包和分包解决方案



包头定义长度 : 定义数据包的包头信息 , 在包头中定义数据包长度 , 这样就知道当前包的大小 , 接收到数据包以后 , 就可以知道该数据报是否是完整的包 , 是否有粘包 , 分包的情况 ;

数据包首尾边界 : 在数据包前后加上包头标识 和 包尾标识 , 为数据包添加边界 ;





三、客户端 Android 应用使用 Protobuf



参考 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 ) 博客进行开发 ;





四、服务器端 Java 服务器使用 Protobuf



编写 Java 服务器端软件 , 使用 eclipse 或 IntelliJ IDEA 开发环境 , 将 Android Studio 中使用的 Protobuf 源文件拷贝到服务器端环境中 , 使用 protoc 进行手动编译 ;

【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )

也可以参考 Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial 文档 , 使用 Gradle 插件进行自动编译 ;


服务器端软件开发参考

BIO 网络编程参考 : 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )

NIO 网络编程参考 : 【Netty】NIO 网络编程 聊天室案例

Netty 网络编程参考 : 【Netty】Netty 入门案例分析 ( Netty 模型解析 | Netty 服务器端代码 | Netty 客户端代码 )


懒得写了 , 就这样吧 , 都超级简单的原理 ;





五、参考资料



Protobuf 参考资料 :

博客源码 :

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/116208459

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。