【东软实训Day04】Java UDP通信

一、UDP协议简介(User Datagram Protocol,用户数据报协议)

UDP是传输层的协议,该协议主要为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。

二、UDP的主要特点:

1. UDP是无连接的

即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。

2. UDP使用尽最大努力交付

即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里边有许多参数)。

3. UDP是面向报文的

发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

4. UDP没有拥塞控制

因此网络出现的拥塞不会使源主机的发送速率降低。

5. UDP支持一对一、一对多、多对一和多对多的交互通信

6. UDP的首部开销小

只有8个字节,比TCP的20个字节的首部要短。

三、DatagramSocket类

DatagramSocket 类用于表示发送和接收数据报包的套接字。数据报包套接字是包投递服务的发送或接收点。每个在数据报包套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

1. 构造方法

(1)DatagramSocket()
表示创建一个默认的套接字,并绑定到本地地址和一个随机的端口号

(2)DatagramSocket(int port)
表示创建一个默认的套接字,并绑定到本地地址和特定的端口号

(3)DatagramSocket(int port, InetAddress iad)
表示创建一个套接字,绑定到特定的端口号及指定地址

(4)DatagramSocket(SocketAddress sad)
表示创建一个套接字,绑定到特定的套接字地址

2. 基本方法

(1)close()
关闭套接字

(2)recevie(DatagramPacket dp)
接受数据报

(3)send(DatagramPacket dp)
发送数据报

四、DatagramPacket类

java.net 包中的 DatagramPacket 类用来表示数据报包,数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

1. 接受类型

(1)DatagramPacket(byte[] buf, int length)
用来接受长度为length的buf数据(即数据存于字节数组buf中)

2. 发送类型

(1)DatagramPacket(byte[] buf, int length, InetAddress address, int port)
将length长的buf数据发送到指定的地址的端口号处

(2)DatagramPacket(byte[] buf, int length, SocketAddress address)
将length长的buf数据发送到指定的套接字地址处

五、代码实例

先运行接收方,再运行发送方。
SendMessage信息发送端:

public class SendMessage {public static void main(String[] args) {try {// 1.建立套接字DatagramSocket ds = new DatagramSocket();// 2.创建信息,并且打包String info = "原神,启动!";// 信息装包 信息内容 信息长度 ip/域名 10086DatagramPacket dp = new DatagramPacket(info.getBytes(),info.getBytes().length,InetAddress.getByName("127.0.0.1"),10086);ds.send(dp); // 使用datagramSocket对象将DatagramPacket对象发送出去ds.close(); // 关闭} catch (SocketException e) {throw new RuntimeException(e);} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

Recv信息接收端:

public class Recv {public static void main(String[] args) {try {// 1.套接字DatagramSocket ds = new DatagramSocket(10086);// 2. 创包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);// 3.将接受的信息写到包里面ds.receive(dp);System.out.println(dp);for (byte b : bytes) {System.out.println(b);}System.out.println(dp.getData());// 4.关闭ds.close();} catch (SocketException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

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

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

相关文章

docker真实IP解决

背景 在微服务的环境中使用docker部署各个应用,部分应用使用容器内的真实ip暴露出服务。会导致微服务之间调用出现网络超时,要解决这个问题需要让微服务暴露为宿主机的ip 解决 方式一 使用docker-compose的配置 network_mode: "host" emq…

SpringMVC之CRUD(增删改查)

SpringMVC之CRUD(增删改查) 数据库 # 创建表CREATE TABLE Student (sid INT PRIMARY KEY,sname VARCHAR(50),sage INT,spic VARCHAR(255));给student表插入数据 INSERT INTO Student (sid, sname, sage, spic) VALUES (1, John Do, 25, path/to/image1.jpg), (2, Jane Smith, …

IIS解析漏洞复现

文章目录 漏洞复现总结 漏洞复现 打开虚拟机,在C:\inetpub\wwwroot\8000_test目录下放一个phpinfo.php文件: 在服务器管理器中打开IIS管理器,选择处理映射程序: 点击添加模块映射: 配置映射模板,php文件…

个人简历a

赖国尚 个人信息 性别:男                      年龄:23手机:15766355301           邮箱:1540302412qq.com期望岗位:音视频开发工程师    期望薪资:面议 教育背景…

【AI】数学基础——最优化

从本质上讲,人工智能的目标就是最优化——在复杂环境中与多体交互中做出最优决策 几乎所有的人工智能问题都会归结为一个优化问题 在线性搜索中,确定寻找最小值时的搜索方向需要使用目标函数的一阶导数和二阶导数置信域的思想是先确定搜索步长&#xff0…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS基础(一)

ﻌﻌﻌﻌ♡‎ﻌﻌﻌﻌ♡‎‎ﻌﻌﻌﻌ♡‎ﻌﻌﻌﻌ♡ﻌﻌﻌﻌ…

Qt使用注意事项

1.菜单选项不能出现数字,可以是 英文 加 “_”: 2.如何确保加载的图片,尺寸大小与原来一样? 【QT】添加图片资源并使用QImage加载图片显示_qimage显示图片_李春港的博客-CSDN博客 ui->PicLabel->setPixmap(QPixmap::fromIm…

K8s的网络——underLay和overLay网络

0. 基础知识 1)网络7层基础知识 在网络7层协议基础里, 第一层物理链路;第二层是数据链路层,在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性,主机A发送数据时,会向局域网内进行广播…

QT生成ICO文件

生成ICO文件 #include <QApplication> #include <QImage> #include <QIcon> #include <QFile> #include <QDebug> #include <QPixmap>int main(int argc, char* argv[]) {QApplication app(argc, argv);// 读取图片文件QImage image(&quo…

Python基本情况

Python&#xff08;发音&#xff1a;/ˈpaɪθən/ &#xff09;是一种强大的编程语言&#xff0c;它简单易学&#xff0c;提供众多高级的数据结构&#xff0c;让我们可以面向对象进行编程。Python 的语法优雅&#xff0c;由于是一个解释性语言&#xff0c;更贴近人类自然语言&…

IDEA编写Java编程代码提示插件

网址&#xff1a; aiXcoder idea软件中使用代码提示&#xff1a; aixcoder

uniapp使用@microsoft/signalr(报错“ReferenceError: require is not defined“)

后台老哥要用微软的signalr&#xff0c;总结了一些经验和问题 引入方法 1、npm npm i microsoft/signalr 2、下载他的js或者cdn <script src"https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/6.0.1/signalr.js"></script>在uniapp中&…

Python vs C#:首先学习哪种编程语言最好?

进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…

Vue前端框架11 组件事件与v-mode配合使用、组件数据传递(父传子)、插槽Slot、具名插槽、插槽中的数据传递(双向)

文章目录 一、组件事件与v-model配合使用二、组件数据传递&#xff08;子传父&#xff09;三、插槽Slots四、具名插槽五、插槽中的数据传递 一、组件事件与v-model配合使用 组件A的数据变化 组件B可以实时显示 <template><h3>Main</h3><p>搜索内容为…

Postman使用_Tests Script(断言测试)

断言测试可以在Collection、Folder和Request的 pre-request script 和 test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#xff0c;只有测试符合自定义的要求后才能通过。 pm对象提供了测试相关功能…

常用的8位单片机+2.4g遥控芯片的“化学”反应

8位单片机通常是微控制器&#xff0c;它们具有相对简单的处理能力&#xff0c;但对于许多嵌入式系统和低复杂度应用而言&#xff0c;它们足够使用。这些芯片通常具有较低的功耗&#xff0c;价格相对实惠。 2.4GHz无线通信芯片&#xff0c;则具备强大的无线通信能力。它们可以实…

golang获取时区报错的问题

golang<1.20版本的time包 time.LoadLocation(timezone) 读取某些时区会报错&#xff0c;升级到1.20可以解决 顺便&#xff0c;某些开发把error直接置为_隐藏掉的习惯真的差评 func Test3(t *testing.T) {timezone : "America/Ciudad_Juarez"timezone "Euro…

van-button根据参数改变字体颜色,实现高度自定义

本来van-button没有属性去单独自定义字体颜色。通过研究&#xff0c;我发现可以通过:style来实现这一需求。 <van-button class"case-btn" :color"item.BtnBgColor":style"{ color : item.BtnColor }"click"jumpToUrl(item)" >…

datax同步clickhouse数据到hive

1.准备数据 1.1 clickhouse建表并插入数据 CREATE TABLE cell_towers_10 (radio Enum8( = 0, CDMA = 1,

windows 下docker安装宝塔镜像 宝塔docker获取镜像

1. docker 安装宝塔 打开链接&#xff1a;https://www.docker.com/get-started&#xff0c;找对应的版本下载docker&#xff0c;安装docker打开百度云盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1DGIjpKkNDAmy4roaKGLA_w 提取码&#xff1a;u8bi 2. 设置镜像 点…