前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )

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

作者头像
韩曙亮
发布2023-03-29 10:35:11
1.3K0
发布2023-03-29 10:35:11
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、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 参考资料 :

博客源码 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、TCP 粘包和分包
  • 二、TCP 粘包和分包解决方案
  • 三、客户端 Android 应用使用 Protobuf
  • 四、服务器端 Java 服务器使用 Protobuf
  • 五、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档