UDP和TCP特点(部分)对比:

传输层的两个主要协议:TCP 和 UDP

UDP和TCP特点(部分)对比:

UDP:无连接, 不可靠传输, 面向数据报, 全双工。

TCP:有连接, 可靠传输, 面向字节流, 全双工。

UDP 和 TCP 有着两套不同的api, 操作系统给程序用于网络编程的api又起了另外的名字提叫:socket api。

        有连接就如打电话,不仅需要打电话的人来拨号,也需要接电话的人来同意,这个过程就是建立连接。而无连接就如发短信,只需要知道对方的号码,就可以直接发短信,不需要对方的同意。

        可靠传输与不可靠传输的可靠不是指A给B的信息能100%的到达,而是指A尽可能的把信息传给B,并且在传输过程中,A能感觉到是否传输成功,而TCP能感觉的到,UDP不行,虽然TCP是可靠传输,但这也因此导致传输效率降低了,而UDP的传输效率更高。可靠传输与不可靠传输并不是判断网络安全的标准之一,因此不能说TCP一定比UDP更安全。

        TCP和文件操作类似,都是流式的,如水一样,可以一次取几十毫升,也可分几十次取一毫升,凭自己的想法决定,TCP传递消息也是如此,因此TCP是面向字节流,而UDP则不同,它是面向数据报的,它的读写的基本单位是一个UDP数据报,因此,它只能一次传输一个UDP数据报,而不能一次传输多个数据报或者半个数据报之类的。

        全双工指的是一个通道,可以双向通信,就如在同一个通道里,A给B发信息时,B也能给A发信息,同时还有半双工,它指的是一个通道,只能单向通信。

UDP的socket api

两个核心类:

1)DatagramSocket

是一个Socket对象,操作系统使用文件的概率来管理一些软硬件资源,同样的,操作系统也使用文件的方式来表示网卡的,表示网卡的这类文件,称为Socket文件,JAVA中的Socket对象,就对应这系统里的Socket文件(最终还是得落在网卡上)。因此要进行网络对象,就必须得有Socket对象,然后通过网卡进行网络通信。

DatagramSocket类有两个构造方法,一个带端口号的(在服务器这边使用,端口号手动指定),一个不带端口号(在客户端使用,系统自动分配),为什么这么设置呢?如开餐厅,每次客人来吃时,只需要找到餐厅位置,但餐厅所处位置这有许多餐厅,要想与其他餐厅区分开来,就需要有一个与其他餐厅不同的名字,而这个名字就相当于服务器端口号,倘若这个名字会随着时间改变,那么如果有回头客时,就会找不到原来的餐厅,因为餐厅名发生改变,因此服务器的端口号是不能随意改变的,而顾客来餐厅吃时,也不是每次都在一个地方,而是哪有位置去哪,这个就是有系统自动分配的端口号,倘若手动指定位置,有可能该端口号已被占用,就无法进行交互,因此由系统自动分配是比较适合,所以,客户端的DatagramSocket类不带端口的。

除此之外,还提供了其他的方法:

void  receive(DatagramPacket p): 从此套接字接收数据报(如果没有接收到数据报,该方法会阻
塞等待)
void send(DatagramPacket p):从此套接字发送数据报包(不会阻塞等待,直接发送)
void close() :关闭此数据报套接字

2)  DatagramPacket

表示了一个UDP数据报,代表了系统中设定的UDP数据报的二进制结构。同样也有两个构造方法:

DatagramPacket(byte[] buf, int length): 构造一个 DatagramPacket 以用来接收数据报,接收的数据保存在 字节数组(第一个参数 buf )中,接收指定长度(第二个参数 length

DatagramPacket(byte[] buf, int offset, int length, SocketAddress address): 构造一个 DatagramPacket 以用来发送数据报,发送的数据为字节 数组(第一个参数 buf )中,从 0 到指定长度(第二个参数 length )。 address 指定目的主机的 IP 和端口号
除此之外,还有这其他方法:

       

TCP的socket api

两个核心类:

1)ServerSocket

给服务器使用的Socket

ServerSocket中会有一个“管理连接”的队列,当客户端和服务器尝试建立连接的时候,服务器就会和客户端进行一系列的数据交互,这个过程就称为握手,这个过程完了后,连接就建立好了,这个时候管理连接的队列里就会有这个连接元素,每有一个客户端与服务器建立连接,就会往这个队列添加一个元素。

2)Socket

服务器和客户端都要使用。

        

InetAddress getInetAddress()         返回套接字所连接的地址
InputStream getInputStream()         返回此套接字的输入流
OutputStream getOutputStream()         返回此套接字的输出流

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

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

相关文章

Android---java内存模型与线程

Java 内存模型翻译自 Java Memory Model,简称 JMM。它所描述的是多线程并发、CPU 缓存等方面的内容。 在每一个线程中,都会有一块内部的工作内存,这块内存保存了主内存共享数据的拷贝副本。但在 Java 线程中并不存在所谓的工作内存&#xff0…

C#实现OPC DA转OPC UA服务器

运行软件前提前安装好OPC运行组件: 为方便演示,提前准备好了一个DAServer服务器: 接下来开始配置: 该软件主要实现的功能如下: 配置过程也相对简单: 第一步: 编辑如下文件: 第二步…

YOLOv7改进策略:RIFormerBlock助力检测|CVPR2023 RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构

💡💡💡本文属于原创独家改进: 稀疏重参数RIFormerBlock模型引入YOLOv7进行创新性 RIFormerBlock | 亲测在多个数据集实现涨点; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研创新结合,轻松…

redis在linux系统的安装与使用

一、单机安装Redis。 1.安装redis依赖 在控制台输入 yum install -y gcc tcl2.上传安装包 下载好的安装包上传到/usr/local/src/ 上传方法: 1.确保你拥有Linux服务器的IP地址、用户名和密码。 2.在Windows上,打开命令提示符(Command Promp…

大数据学习(7)-hive文件格式总结

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博>主哦&#x…

Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

星光下的赶路人star的个人主页 你生而真实,而非完美 文章目录 1、Flink SQL1.1 SQL-Client准备1.1.1 基于yarn-session模式1.1.2 常用配置 1.2 流处理中的表1.2.1 动态表和持续查询1.2.2 将流转换为动态表1.2.3 用SQL持续查询1.2.4 将动态表转换为流 1.3 时间属性1.…

PLC和工控机的网络特性

现场总线技术是工业自动化***深刻变革之一。PLC和工控机采用现场总线后可方便地作为I/O站和监控站连接在DCS系统中。现场总线是一种取代4~20mA标准,用于连接智能现场设备和控制设备的双向数字通讯技术,现场总线具有开放性和互操作性&#xff…

【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

目录 前言 八、结构体 8.1 结构体类型 8.2 结构体类型名 8.2.1 typedef关键字 8.2.1 结构体类型别名 8.3 结构体变量 8.3.1 使用结构体类型引用 8.3.2 使用结构体类型定义 8.3.3 使用typedef定义的结构体类型别名 8.4 访问结构体变量 8.4.1 直接成员选择表达式 8.…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

yolov8 strongSORT多目标跟踪工具箱BOXMOT

1 引言 多目标跟踪MOT项目在Github中比较完整有:BOXMOT , 由mikel brostrom提供。在以前的版本中,有yolov5deepsort(版本v3-v5), yolov8strongsort(版本v6-v9),直至演变…

[Machine learning][Part4] 多维矩阵下的梯度下降线性预测模型的实现

目录 模型初始化信息: 模型实现: 多变量损失函数: 多变量梯度下降实现: 多变量梯度实现: 多变量梯度下降实现: 之前部分实现的梯度下降线性预测模型中的training example只有一个特征属性&#xff1a…

【k8s】ingress-nginx通过header路由到不同后端

K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目,需要在相同域名、uri,根据header将请求转发到不同的后端中在稳定发布的情况下,ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…

Tmux教学【有图有代码】

Tmux教学【有图有代码】 0、前言1、Tmux基本概念1.1 安装 2、Tmux使用2.1 session操作2.2 window操作2.3 pane操作2.4 其他操作 3、日常中Tmux的工作流 0、前言 想必同学们在跑代码时也许会存在这样一个问题: 本地在连接远程服务器跑代码的时候,本地ssh窗…

分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测

分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-GRU开普勒算法优化卷积门控循环单…

Unity编辑器从PC平台切换到Android平台下 Addressable 加载模型出现粉红色,类似于材质丢失的问题

Unity编辑器在PC平台下使用Addressable加载打包好的Cube,运行发现能正常显示。 而在切换到Android平台下,使用Addressable时加载AB包,生成Cube对象时,Cube模型呈现粉红色,出现类似材质丢失的问题。如下图所示。 这是…

【机器学习】决策树原理及scikit-learn使用

文章目录 决策树详解ID3 算法C4.5算法CART 算法 scikit-learn使用分类树剪枝参数重要属性和接口 回归树重要参数,属性及接口交叉验证代码示例 一维回归的图像绘制 决策树详解 决策树(Decision Tree)是一种非参数的有监督学习方法,…

【算法优选】 二分查找专题——贰

文章目录 😎前言🌲[山脉数组的峰顶索引](https://leetcode.cn/problems/peak-index-in-a-mountain-array/)🚩题目描述:🚩算法思路🚩代码实现: 🌴[寻找峰值](https://leetcode.cn/pro…

VUE3基础知识梳理

VUE3基础知识梳理 一、vue了解和环境搭建1.vue是什么:cn.vuejs.org/vuejs.org2.渐进式框架3.vue的版本4.vueAPI的风格5.准备环境5.1.创建vue项目5.2.vue的目录结构 二、vue3语法1.干净的vue项目2.模板语法2.1 文本插值2.2属性绑定2.3条件渲染2.4列表渲染2.5通过key管…

10、SpringBoot_测试用例

四、测试用例 1.准备工作 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>com…

ELK 处理 SpringCloud 日志

在排查线上异常的过程中&#xff0c;查询日志总是必不可缺的一部分。现今大多采用的微服务架构&#xff0c;日志被分散在不同的机器上&#xff0c;使得日志的查询变得异常困难。工欲善其事&#xff0c;必先利其器。如果此时有一个统一的实时日志分析平台&#xff0c;那可谓是雪…