(JAVA)-(网络编程)-UDP协议

news/2024/5/18 13:38:26 标签: 网络, udp, tcp/ip

在上上文章中我们简单了解了UDP通信协议和TCP协议。这篇文章 来讲解java中如何使用UDP协议发送数据。

UDP通信协议发送数据:

而使用UDP通信协议发送数据也可以看成是寄快递的过程。

在寄快递的过程中,我们首先得找快递公司,接着得打包好礼物,然后让快递公司发送包裹,最后付钱走人。

1.首先我们得找快递公司:创建发送端的DatagramSocket 对象

DatagramSocket ds=new DatagramSocket();

细节:创建DatagramSocket对象时可以绑定端口号,如果用空参构造的话,就会从可用的端口号中随机选一个进行绑定。我们就是通过这个端口往外发送数据的。

2.打包礼物:数据打包(datagramPacket)

String str="邓子诩子"//要打包的数据
byte [] bytes=str.getBytes();//将字符串进行编码
int port=10086;
InetAddress address=InetAddress.getByName("127.0.0.1");
DatagramPacket dp=new DatagramPacket(bytes,bytes.length, address,port)//打包数据

表示要将bytes字节数据长度为bytes.length长度的数据发送至address地址的port端口。

3.快递公司发送包裹:发送数据

ds.send(dp);

4.付钱走人:释放资源

ds.close();

UDP通信协议接收数据:

使用UDP通信协议接收数据可以看成是拿快递的过程。

拿快递首先我们得找快递公司,然后接收箱子,接着从箱子中获取礼物,最后签收走人

1.找快递公司:创建接收端的DatagramSocket对象

细节:在接收时候一定要绑定端口号,绑定的端口号要跟发送的端口保持一致

DatagramSocket ds=new DatagramSocket(10086);

2.拿到快递包:接收数据包

细节:receive方法是阻塞的,会一直等到接收到数据再结束此方法

byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,byte.length);
ds.receive(dp);

我们创建了一个bytes数组用来接收数据包,使用该数组的byte.length长度的字节来接收数据。

3.从箱子中获取礼物:解析数据包

byte data=dp.getDate();//获取数据数组
int length=dp.getLength();//获取字节数据的长度
int port=dp.getPort();//获取发送端的端口
dp.getAddress();//获取发送端的ip

4.签收走人:释放资源

ds.close()

 UDP的三种通信方式:

1.单播:一台机器和一台机器通信这是单播。像我们上面写的代码都是单播

2.组播:一台机器给一组机器发送消息就是组播。

组播地址:224.0.0.0-224.0.0.25  ,其中224.0.0.0-224.0.0.255是预留的我们能使用的组播地址

组播代码跟上面的单播代码差不多,需要注意的点:

1.创建Socket对象时创建的是MulticaseSocket对象

MulticastSocket ms=new MulticastSocket();

1.发送端要发送的ip地址要写组播地址 

2.接收端要使用Socket类中的joinGroup方法把当前主机添加到组播的组中。

InetAddress address=InetAddress.getByName("224.0.0.1");
ms.joinGroup(address);

3.广播:能给局域网中所有的ip发送数据。

需要注意:发送端要发送的ip地址要写广播地址:255.255.255.255。


http://www.niftyadmin.cn/n/5297347.html

相关文章

Qt基础之四十五:Qt国际化(I18N)

国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),这种奇葩的缩写方式,让我想起了NBA球星“字母哥”。 下面看下Qt实现的动态语言切换效果。 一.效果 二.源码 QHSettingDialog.h #ifndef QHSETTINGDIALOG_H #define QHSETTINGDIALOG_H#…

Java设计模式实战:从If-Else到策略+工厂方法的演变

引言 可能很多开发者,虽然理解了设计模式的概念,但在实际工作中应用却是另一回事。本篇文章旨在用一个具体的案例来展示如何将设计模式应用到工作的编程问题中。正所谓:“纸上得来终觉浅,绝知此事要躬行。”理论的学习固然重要&a…

剑指 Offer(第2版)面试题 64:求1+2+…+n

剑指 Offer(第2版)面试题 64:求12…n 剑指 Offer(第2版)面试题 64:求12…n解法1:构造函数解法2:虚函数解法3:数组 剑指 Offer(第2版)面试题 64&am…

软件测试/测试开发丨Python 常用第三方库 yaml

YAML 一种数据序列化格式用于人类的可读性和与脚本语言的交互一种被认为可以超越 XML、JSON 的配置文件 YAML 基本语法规则 大小写敏感使用缩进表示层级关系缩进时不允许使用 Tab 键,只允许使用空格缩进的空格数目不重要,只要相同层级的元素左侧对齐即…

【mysql】数据处理格式化、转换、判断

数据处理 判断是否超时,时间是否大于当前时间计算分钟数时间格式化处理如果数值类型进行转换字符类型字符拼接case-when代替if-else判断数据空(特殊:含空数据、空字符处理) select /*判断是否超时,时间是否大于当前…

Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules。Android studio纯java代码报错

我使用java代码 构建项目,初始代码运行就会报错。我使用的是Android Studio Giraffe(Adroid-studio-2022.3.1.18-windows)。我在网上找的解决办法是删除重复的类,但这操作起来真的太麻烦了。 这是全部报错代码: Dupli…

VUE——IDEA 启动前端工程VS文件启动前端工程

IDEA 启动前端 目录 前言一、打开控制台二、输入npm install三、依赖下载完之后,输入npm run dev,运行前端项目1、IDEA启动前端工程2、文件目录启动前端工程 四、点击http://localhost:8080后续敬请期待 前言 启动已有的vue前端项目 一、打开控制台 选…

Android--Jetpack--Paging详解

不尝世间醋与墨,怎知人间酸与苦。 择一业谋食养命,等一运扭转乾坤。 你见过哪些令你膛目结舌的代码技巧? 文章目录 不尝世间醋与墨,怎知人间酸与苦。择一业谋食养命,等一运扭转乾坤。你见过哪些令你膛目结舌的代码技…