【Java网络原理】 四

news2024/11/13 15:03:37

本文主要介绍了TCP/IP五层协议中的应用层常见的数组组织格式和传输层UDP协议。

一.应用层

1.网络通信数据的实质

网络上传输的数据,本质就是字符串(准确的说,是二进制的字符串)

Java中的各种对象,是无法直接传输的

>在发送的时候,就需要把对象转成二进制字符串   ---序列化

>收数据的时候,也需要把二进制字符串转回对象   ---反序列化


通信的要求:

客户端的请求以及服务器的响应,具体的数据组织格式,是非常灵活的,

程序员想怎样组织都可以,只需要保证客户端和服务器使用的相同的规格就行

应用层有很多现成的协议,但是有时候需要程序员自定义协议

自定义协议:

1.明确好传递的信息有什么

2.约定好信息按照什么格式来组织

注意:自定义格式虽然可以任意,但是为了避免出现过于天马行空的设计,有一些大佬就搞出了一些 通用的协议格式,对我们的协议设计是有重要的指导作用的。

下面是介绍三种常见数据组织格式:

2.常见的数据格式

1.xml

以成对的标签,来表示键值对信息,同时标签支持嵌套,构成一些更复杂的树形结构数据。

请求:

<request>
	<userId>123</userId>         //键值对结构  userId: 123
	<password>111</password>     //           password:111
</request>


响应:
<response>
	<allSubjects>

		<subject>
			<name>math</name>
			<score>99</score>
		</subject>
		
		<subject>
			<name>chinese</name>
			<score>99</score>
		</subject>	
	
	</allSubjects>
</response>

和html区别:

html里的标签,有自己的标准

xml里的标签,就是程序员自定义的

优点:xml把结构化数据表示的非常清晰

缺点:表示数据需要引入大量的标签,看起来繁琐,同时会占用很多网络带宽

现状:xml用的越来越少了

2.json

当前最流行的组织格式

本质上也是键值对,但是比xml要干净很多

组织形式:

{}        表示键值对

[]        表示数组,数组中可以是数组,还可以是{}或者[]

请求:
{
	UserId:123,
	Password:11a

}


响应:
[
	{
	Name:math,
	Score:99
	}
	,
	{
	Name:chinese,
	Score:99
	}
]

现状:最主流使用的一种网络传输数据的格式,未来在实际开发中会经常使用json格式的数组

特性:json中可以把所有内容放在同一行,通常网络传输中,会把json进行压缩,同时把所有数据放到一行,整体占用的带宽就降低了。

3.protobuffer

谷歌提出的一套二进制的数据序列化方式

特性:使用二进制的方式,约定哪几个字节,表示哪个数据。最大程序的节省空间,不必传输key,根据位置和长度区分每个属性

优点:节省带宽,最大效率化

缺点:二进制数据,无法用肉眼观察,不方便调试;使用复杂;

适用场景:性能要求更高的场景(牺牲了开发效率,换来运行效率)

总结:

除了以上三种,业界还有很多其他的数组组织格式,比如Java标准库就提供了方式;还有其他的第三方库提供的方式更丰富

二.传输层

1.UDP用户数据报协议

UDP基本特点:无连接 不可靠传输  面向数据报 全双工

学习一个协议,要掌握协议的特性,还要理解协议报文格式

1.1UDP数据报格式

UDP用户数据报报文格

报头各字段说明:

报头有四个字段,每个字段占2字节,2字节的数据范围是0 ~ 65535

>源/目的端口:范围是0 ~ 65535 

其中1-1024是知名端口,不建议使用。

>长度:指的是数据载荷的长度,最大65535,也就是64kb,这意味着一个UDP数据载荷最大只能65535这么长。

这在互联网发展之初,是比较大的;

放在现在,64KB已经非常小了,经常是不能够满足使用的;

但是现在由于种种原因,已经无法改变了。

应对方案:

1.在应用层代码中把报文拆分成多组,通过多个UDP数据报进行传输

2.使用tcp代替udp,tcp没有报文长度限制

>检验和

事实:网络传输数据过程中,收到外界干扰,就会出错;

由于本质上传输的是光信号/电信号/电磁波 (比如受太阳活动的影响,就会影响到正常的网络通信)

可能会导致比特翻转( 0->1 / 1->0 ),所以就要将收到的数据和发来的数据进行对比。

UDP使用CRC校验算法(循环冗余校验和)

思想:累加结果保存到这个2字节的变量中,最终就得到了校验和。

接受方收到数据时候,按照同样的方式再算一遍校验和

数据相同    --> 校验和相同

校验和不同 --> 数据不同

但是校验和相同 不能推出 数据相同 (可能会出现巧合)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

共享WiFi贴项目地推技巧,轻松学会推广!

共享WiFi贴代理是一种热门的赚钱方式&#xff0c;通过推广共享WiFi贴来获取收益。但要想在竞争激烈的市场中脱颖而出并赚到钱&#xff0c;并不是一件容易的事情。在本文中&#xff0c;我们将介绍一些推广及赚钱的方法。 选择合适的位置是推广共享WiFi贴的关键。你需要选择人流量…

SpringAOP源码解析之advice执行顺序(三)

上一章我们分析了Aspect中advice的排序为Around.class, Before.class, After.class, AfterReturning.class, AfterThrowing.class&#xff0c;然后advice真正的执行顺序是什么&#xff1f;多个Aspect之间的执行顺序又是什么&#xff1f;就是我们本章探讨的问题。 准备工作 既…

QML(26)——多层qml界面传递信号

目录 使用场景传统方式高效方式代码效果展示 使用场景 界面嵌套关系如下 #mermaid-svg-Pt8AQGPjE5lV7nJh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Pt8AQGPjE5lV7nJh .error-icon{fill:#552222;}#mermaid-svg…

2016年亚太杯APMCM数学建模大赛C题影视评价与定制求解全过程文档及程序

2016年亚太杯APMCM数学建模大赛 C题 影视评价与定制 原题再现 中华人民共和国成立以来&#xff0c;特别是政治改革和经济开放后&#xff0c;随着国家经济的增长、科技的发展和人民生活水平的提高&#xff0c;中国广播电视媒体取得了显著的成就&#xff0c;并得到了迅速的发展…

如何通过在线培训考试系统进行远程教育

随着互联网技术的不断发展&#xff0c;远程教育正在成为一种新型的学习方式&#xff0c;它使学生能够在任何地点、任何时间通过在线培训考试系统接受教育。 利用在线培训考试系统进行远程教育具有很大的灵活性。学生可以根据自己的时间和需求自由选择课程&#xff0c;无需受制…

MySQL进阶(日志)——MySQL的日志 bin log (归档日志) 事务日志redo log(重做日志) undo log(回滚日志)

前言 MySQL最为最流行的开源数据库&#xff0c;其重要性不言而喻&#xff0c;也是大多数程序员接触的第一款数据库&#xff0c;深入认识和理解MySQL也比较重要。 本篇博客阐述MySQL的日志&#xff0c;介绍重要的bin log (归档日志) 、 事务日志redo log(重做日志) 、 undo lo…

C语言系统化精讲(四):C语言变量和数据类型-下篇

文章目录 一、C语言中的小数1.1 小数的输出1.2 小数的后缀1.3 小数和整数相互赋值 二、在C语言中使用英文字符2.1 字符的表示2.2 字符的输出2.3 字符与整数2.4 C语言转义字符 四、C语言布尔类型&#xff08;_BOOL&#xff09;五、补充&#xff1a;C语言中的几个重要概念5.1 标识…

损失函数总结(六):KLDivLoss、BCEWithLogitsLoss

损失函数总结&#xff08;六&#xff09;&#xff1a;KLDivLoss、BCEWithLogitsLoss 1 引言2 损失函数2.1 KLDivLoss2.2 BCEWithLogitsLoss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLoss、NLLLoss、CTCLoss、Poi…

【mysql】实现设置表中所有数据的update_time,要求每1000条设置在一天

实现效果示例 执行SQL&#xff1a;&#xff08;mysql 版本查看&#xff1a; select VERSION() &#xff1a;5.7.36-log&#xff09; 实现效果&#xff1a; 这里最后一个id 9 > 总条数 6&#xff0c;所以没有更新到&#xff0c;直接手动补下就行 SELECT * FROM my_test S…

Capture One 23 Enterprise 16.3.0.76

Capture One 23 Enterprise是一款图像处理软件&#xff0c;旨在为企业用户提供高效、快速和灵活的工作流程。以下是该软件的主要特点和功能&#xff1a; 强大的图像编辑工具&#xff1a;Capture One 23 Enterprise提供了一系列强大的图像编辑工具&#xff0c;包括色彩校正、曲…

为什么自动驾驶需要5G?

什么叫自动驾驶&#xff1f; 自动驾驶分为6个等级&#xff1a; Level 0&#xff1a;人工驾驶&#xff0c;无驾驶辅助系统&#xff0c;仅提醒。 Level 1&#xff1a;辅助人工驾驶&#xff0c;可实现单一的车速或转向控制自动化&#xff0c;仍由人工驾驶&#xff08;如定速巡航…

Java--for循环

1.for循环 控制一段代码反复执行很多次 2.for循环格式 3.for循环案例详细流程说明 执行的流程: ①循环一开始&#xff0c;执行 int i 0 一次 ②此时 i 0&#xff0c;接着计算机执行循环条件语句: 0 < 3返回true&#xff0c;计算机就进到循环体中执行&#xff0c;输出:…

WSL——ubuntu中anaconda换源(conda、pip)

1、conda 打开Ubuntu&#xff0c;输入下列命令。 conda config --set show_channel_urls yes 在文件管理器地址栏&#xff0c;输入&#xff1a;\\wsl$。打开Ubuntu根路径&#xff0c;其中显示了.condarc文件。 以文本形式打开&#xff0c;并输入要换的源&#xff0c;保存即可。…

hypercube背景设置为白色,绘制高光谱3D立方体

import scipy pip install wxpython PyOpenGL和Spectral需要本地安装 可参考链接https://blog.csdn.net/qq_43204333/article/details/119837870 参考&#xff1a;https://blog.csdn.net/Tiandailan/article/details/132719745?spm1001.2014.3001.5506Mouse Functions:left-cl…

推荐几个好用的短链接网址生成平台

这里详细的介绍了几个非常不错的短网址在线生成平台&#xff0c;给日常有长链接生成短链接需求的小伙伴一些参考。由于短链接生成器比较容易失效&#xff0c;建议大家在不是特别重要的场景下使用。 前言唠叨 不管是日常写博客、写公众号的自媒体朋友&#xff0c;或者普通个人…

社区迭代|ETLCloud社区新增“论坛”啦!

ETLCloud社区是谷云科技RestCloud旗下面向开发工程师、集成研发人员等技术人员提供全方位交流和学习的开放式平台&#xff0c;也是ETLCloud在产品生态赋能上的一大亮点&#xff0c;旨在能够帮助更多的用户更快捷高效的掌握技能&#xff0c;也为企业提供集成人才培养赋能&#x…

亚马逊注册账号时老是显示内部错误

最近你们是否遇到注册亚马逊账号时一直遇到"内部错误"的情况&#xff1f;&#xff0c;这可能是由多种原因引起的。以下是一些可能有助于解决这个问题的步骤&#xff1a; 1、清除缓存和Cookie&#xff1a;有时浏览器缓存和Cookie中的问题可能导致网站错误。可以试试清…

使用 ionic + cordova + vue3 实现相册选择、拍照,并上传、预览图片

目录 1.上传组件 upload.vue 1.1 模板规划 1.2 点击添加按钮 1.2.1 实现询问弹框 1.2.2 实现拍照 1.2.3 实现相册选择 1.2.4 实现文件上传 1.2.5 校验图片类型并上传 1.2.6 获取图片列表 1.2.7 在组件内 添加图片附件 2.图片放大组件 enlarge-image.vue 2.1 点击图…

selenium+python自动化测试 —— 解决无法启动IE浏览器及报错问题!

前言&#xff1a;记录启动IE浏览器的报错及解决方法。 错误1&#xff1a; selenium.common.exceptions.WebDriverException: Message: IEDriverServer.exe executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html…

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)上位机设计

采集仪上位机设计 本章开发了一款基于 C# 的上位机软件&#xff0c;用于对多类型同步信号采集仪的各项功能 进行操作。从采集仪的数据传输需求出发&#xff0c;上位机利用以太网 UDP 协议实现与采集仪 的数据交互&#xff0c;包括向采集仪发送控制信息与配置信息、接收采…