【JavaEE】——自定义协议方案、UDP协议

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:自定义协议

1:自定义协议

(1)交互哪些信息

(2)数据的具体格式

2:(反)序列化

3:业界方案

二:xml方案

1:优点

2:缺点

三:json方案

1:结构

2:优点

四:protobuffer方案

五:传输层

六:UDP协议

1:特点

七:校验和/检验和

1:比特翻转

2:数据参与

3:CRC算法

4:md5算法特点


一:自定义协议

程序员在调用操作系统提供的网络API写出来的代码都是属于应用层的(回顾五个层级:应用层,传输层,网络层,数据链路层,物理层),应用层自身就有许多已经创建好的协议,但多数情况下是需要程序员自定义协议的

1:自定义协议

主要约定好两方面的内容

(1)交互哪些信息

解释:服务器和客户端之间要交互哪些信息,由产品经理规定需要传输哪些信息

(2)数据的具体格式

解释:客户端按照约定构造、发送请求,解析返回的响应

           服务器按照约定解析请求,构造、发送响应

2:(反)序列化

Client和Server之间交互的是“结构化数据”,网络传输的数据其实是“字符串”“二进制bit流”,约定协议的过程就是把“结构化数据”转化为“二进制bit流”的过程

结构化数据———转化———>字符串/二进制bit流       叫做“序列化”

字符串/二进制bit流———还原———>结构化数据        叫做“反序列化”

3:业界方案

为了让程序员更方便的约定这里的协议格式,给出了几个可以直接套用的方案

二:xml方案

1:优点

(1)可读性好:标签的名字能够对数据起到描述作用

(2)延展性好:后续增加属性,只需新增标签,不影响原有代码

2:缺点

整个数据冗余信息非常多,标签占据的空间可能反而比数据本身更多了,在网络传输中会消耗更多的网络带宽(网络带宽这种硬件资源很贵)

三:json方案

1:结构

键值对结构

键和值用   : 分开

键值之间用     ,    分开 

多个键值对用{}括起来,构成一个json对象

多个json对象用   ,   分开  整体用[]括起来形成一个json数组

2:优点

(1)可读性好

key对数据起到解释说明

(2)占用空间更小

相比较于xml中需要开始和结束两个标签,json只用了一个key,更节省网络带宽(这里的节省是相对的,json中的key也会被多次创建)

(3)延展性好

四:protobuffer方案

开发阶段(写代码)定义出有哪些资源,描述每个字段的含义,真正运行的时候,实际传输的数据是不包含这样的描述信息

优点:程序的运行效率高

缺点:不利于程序猿阅读

所以只有那些对性能要求非常高的场景才会使用protobuffer

五:传输层

在数据传输过程中,虽然传输层是操作系统内核中已经实现好的,但是我们也需要重点关注,我们使用的socket的API都是由传输层提供的

对于端口号,它是一个2字节的整数(0,2的16次方-1),在使用端口号的时候,[1,1024]都是属于系统保留的自用的端口号(知名端口号)

六:UDP协议

1:特点

回顾一下:无连接,不可靠传输,面向数据报,全双工,

UDP数据报=报头+载荷

UDP报头中4个字段,每个字段2个字节,共8个字节

协议中报头用2个字节表示端口号,能表示的范围为2^16-1=65535,即[0,65535],

换算一下为64KB——即UDP数据报最大长度为64KB,载荷部分应该是64KB-8

七:校验和/检验和

1:比特翻转

验证数据在传输过程中是否正确,数据在网络传输中可能会坏掉,网络传输本质是发送方的物理层把二进制数据转化为光电信号发送出去。再由另一端的物理层接收光电信号在转化为二进制数据,在这个过程中,很有可能由于外界信号的干扰,发生“1->0”“0->1”这样的翻转情况,导致我们的数据出现问题,校验和的作用就是用来识别数据是否出现比特翻转的。

2:数据参与

校验和是拿着原始信息的一部分内容参与计算的,例如把这样一段字符串“张三今天想吃麻辣烫”传输,在传输之前会把字符串通过某种运算转化成例如“AD343SCSCAF2321”这样的密码串,校验的时候,再运算一次,(在运算转化的过程中,数据可能会超出范围,不打紧)通过比较两次运算的结果可以知道,该次数据传输是否是一致的正确的

3:CRC算法

4:md5算法特点

(1)定长

无论原始数据有多长,算出来的md5最终值都是固定长度

(2)分散

计算md5的过程中,原始数据只要变化一点点,最后得到的md5值就会差异很大

(3)不可逆

给定一个md5的值还原为原始的字符串,理论来说不可行,因为在字符串转化为md5的过程中,已经有很多数据丢失了,特点(1),有兴趣的友友可以在浏览器上搜一下(有点像加密——密码学)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RuoYi-Vue若依 环境搭建 速成

一、若依简介 RuoYi-Vue 是一个开源的后台管理系统,适用于快速开发企业级应用。该平台由两部分组成:前端和后端。 (1)技术框架 前端技术: Vue.js: 前端框架使用 Vue.js,这是一种流行的JavaScript框架&a…

Python爬虫实战:抓取指定网站数据

一、前言 在互联网时代,数据的价值日益凸显。爬虫技术作为一种获取数据的重要手段,广泛应用于各种场景。本文将通过一个实例,介绍如何使用Python进行网站数据的抓取。 二、环境准备 Python 3.xrequests库BeautifulSoup库 三、代码实现 i…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第五篇-着色器投影-投射阴影部分】

投射阴影 最初打算将投影内容放在上一篇中,因为实现非常快速简单,没必要单独成篇。不过因为这里面涉及一些问题,我觉得还是单独作为一篇讲一下比较好。 原理 这里要用到的是 Shadow Pass Switch ,它可以为非不透明的材质替换阴影 某些版本…

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法)

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法) requests-pkcs12 PyPI python中如何使用requests模块下载文件并获取进度提示 1、GET方法 1.1、调用 # 下载客户端(GET)def download_client_get(self, header_all):try:url = self.host + "/xxx/v1/xxx-mod…

【MySQL】索引的机制、使用

在学习索引知识之前,我们可以先了解一下什么是索引。实际上,索引就是数据库中一个或多个列存储的结构,能够支持数据库管理系统在不扫描整张表的情况下也能查询到数据行,能够大大提升查询效率。举个例子,我们想要找到一…

WPF入门_02依赖属性

1、依赖属性主要有以下三个优点 1)依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量 2)节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地…

upload-labs靶场Pass-13

upload-labs靶场Pass-13 查看源码 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_…

WSL2-轻量级AI训练场景最佳生产环境

WSL2 只适用于 Win 10 、Win11 在运行 AI 软件、AI 模型训练,Linux 是最佳的操作系统。 在运行各种软件,如:Stable Diffusion Web UI 等,使用 Docker 容器运行也更方便后期的快速复用,同样的 Docker 容器在 Linux 中…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

入门!Linux 常见指令及权限管理全面指南

Linux 操作系统在现代计算机应用中扮演着重要的角色,广泛用于服务器、桌面系统、嵌入式设备及云计算平台等领域。理解和掌握 Linux 常见指令及权限管理机制,是每一位系统管理员和开发人员的基础技能。本文将详细介绍 Linux 系统的基本背景、常用指令、权…

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…

【leetcode练习·二叉树】用「遍历」思维解题 III

本文参考labuladong算法笔记[【强化练习】用「遍历」思维解题 III | labuladong 的算法笔记] 437. 路径总和 III | 力扣 | LeetCode | 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路…

c语言基础程序——经典100道实例(二)

前面 52 题可以看下 《c语言基础程序——经典100道实例。》 c语言基础程序——经典100道实例 053,按位异或 ^054,取数右端4~7位055,按位取反~056,画圆形057,画直线058,画矩形059,画椭圆060&…

Git上传命令汇总

进入企业,每日需要上传执行用例记录到gitlab平台上,本文记录了常用git上传命令, 并用github演示。 1、本地建立分支,克隆远程仓库 在gitlab中,每个人需要创建自己的分支,一般以自己的名字命名,…

FineReport 页面设置

点击菜单栏中的「模板>页面设置」,弹出页面设置对话框,就可以对当前 sheet 进行页面设置,一个报表的每个 sheet 页面设置可以不同: 1 方向 指纸张方向,通常与打印结合使用。A4 纸横向预览效果和纵向预览效果 2、…

HCIP-HarmonyOS Application Developer 习题(十四)

(多选)1、HarmonyOs为应用提供丰富的Al(Artificial Intelligence)能力,支持开箱即用。下列哪些是它拥有的AI能力? A、通用文字识别 B、词性标注 C、实体识别 D、语音播报 答案:ABCD 分析: AI能力简介二维码生成根据开…

为什么软件维护成本比软件的开发成本高?

很多项目的软件维护成本比软件的开发成本高出很多 一、需求变更频繁 业务需求变化 随着市场环境的变化和业务的发展,客户的需求可能会不断调整和改变。例如,企业的业务模式发生调整,需要软件系统增加新的功能模块或对现有功能进行重大修改…

为什么一条Java命令,JVM就可以执行Java程序了(串联JVM面试知识点)

文章目录 前言从面试题说起JVM做了哪些事?“翻译”的工作不仅仅“翻译” JVM 各部件如何协同工作?类加载器先工作执行引擎开始工作执行引擎工作模式Main方法什么时候被执行? 运行时数据区域开始工作线程私有的空间大名鼎鼎的堆内存 就这么一直…

FineReport 条件属性

条件属性主要指:给报表的属性添加条件,当满足该条件时,对属性的属性值进行修改,从而达到改变报表样式的目的。 条件属性共有 12 种,分别是:颜色、字体、超级链接、形态、缩进、行高、分页、列宽、背景、边框…

Oracle 使用位图索引 Cost降低200倍! 探讨位图索引的利与弊

一.简介 位图索引(Bitmap Index) 是 Oracle 数据库中一种特殊类型的索引,适用于低基数(Low Cardinality)列,即那些列中可选值相对较少的情况下使用。它与常规的 B-tree 索引不同,位图索引通过位…