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

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

文章目录

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


Protobuf 官网主页 : https://developers.google.com/protocol-buffers


Protobuf 语法指南 : https://developers.google.com/protocol-buffers/docs/proto


Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial


Protobuf 下载地址 : https://developers.google.com/protocol-buffers/docs/downloads


Protobuf 源码地址 : https://github.com/protocolbuffers/protobuf


Protobuf 发布版本下载地址 : https://github.com/protocolbuffers/protobuf/releases


protobuf-gradle-plugin 项目地址 : https://github.com/google/protobuf-gradle-plugin


博客源码 :


GitHub 地址 : https://github.com/han1202012/Protocol_Buffers

CSDN 快照 :


目录
相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
221 4
|
15天前
|
缓存 网络协议 Java
【JavaEE】——TCP回显服务器(万字长文超详细)
ServerSocket类,Socket类,PrintWriter缓冲区问题,Socket文件释放问题,多线程问题
|
3月前
|
域名解析 网络协议 数据库
TCP/IP服务器
【10月更文挑战第20天】TCP/IP服务器
136 65
|
2月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
170 4
|
3月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
214 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
3月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
78 2
|
3月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
84 1
|
4月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
421 4
|
3月前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
28 0
|
4月前
|
网络协议 数据处理 C语言
利用C语言基于poll实现TCP回声服务器的多路复用模型
此代码仅为示例,展示了如何基于 `poll`实现多路复用的TCP回声服务器的基本框架。在实际应用中,你可能需要对其进行扩展或修改,以满足具体的需求。
102 0