【JavaSE】Java基础语法(四十):UDP通信程序

news2024/11/26 20:30:36

文章目录

  • 1. UDP发送数据
  • 2. UDP接收数据【应用】
  • 3. UDP通信程序练习【应用】
  • 4. UDP三种通讯方式


在这里插入图片描述

1. UDP发送数据

  • Java中的UDP通信

    • UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个
      Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客
      户端和服务器的概念
    • Java提供了DatagramSocket类作为基于UDP协议的Socket
  • 构造方法
    在这里插入图片描述

  • 相关方法
    在这里插入图片描述

  • 发送数据的步骤
    - 创建发送端的Socket对象(DatagramSocket)
    - 创建数据,并把数据打包
    - 调用DatagramSocket对象的方法发送数据
    - 关闭发送端

  • 代码演示

    public class SendDemo {
    	public static void main(String[] args) throws IOException {
    		//创建发送端的Socket对象(DatagramSocket)
    		// DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
    		DatagramSocket ds = new DatagramSocket();
    		//创建数据,并把数据打包
    		//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
    		//构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
    		byte[] bys = "hello,udp,我来了".getBytes();
    		DatagramPacket dp = new
    		DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),10086);
    		//调用DatagramSocket对象的方法发送数据
    		//void send(DatagramPacket p) 从此套接字发送数据报包
    		ds.send(dp);
    		//关闭发送端
    		//void close() 关闭此数据报套接字
    		ds.close();
    	}
    }
    

2. UDP接收数据【应用】

  • 接收数据的步骤

    • 创建接收端的Socket对象(DatagramSocket)
    • 创建一个数据包,用于接收数据
    • 调用DatagramSocket对象的方法接收数据
    • 解析数据包,并把数据在控制台显示
    • 关闭接收端
  • 构造方法
    在这里插入图片描述

  • 相关方法
    在这里插入图片描述

  • 示例代码

    public class ReceiveDemo {
    	public static void main(String[] args) throws IOException {
    		//创建接收端的Socket对象(DatagramSocket)
    		DatagramSocket ds = new DatagramSocket(12345);
    		//创建一个数据包,用于接收数据
    		byte[] bys = new byte[1024];
    		DatagramPacket dp = new DatagramPacket(bys, bys.length);
    		//调用DatagramSocket对象的方法接收数据
    		ds.receive(dp);
    		//解析数据包,并把数据在控制台显示
    		System.out.println("数据是:" + new String(dp.getData(), 0,
    		dp.getLength()));
    		}
    	}
    }
    

3. UDP通信程序练习【应用】

  • 案例需求

    • UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
    • UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
  • 代码实现

    /*
    	UDP发送数据:
    	数据来自于键盘录入,直到输入的数据是886,发送数据结束
    */
    public class SendDemo {
    	public static void main(String[] args) throws IOException {
    		//创建发送端的Socket对象(DatagramSocket)
    		DatagramSocket ds = new DatagramSocket();
    		//键盘录入数据
    		Scanner sc = new Scanner(System.in);
    		while (true) {
    			String s = sc.nextLine();
    			//输入的数据是886,发送数据结束
    			if ("886".equals(s)) {
    				break;
    			}
    			//创建数据,并把数据打包
    			byte[] bys = s.getBytes();
    			DatagramPacket dp = new DatagramPacket(bys, bys.length,
    			InetAddress.getByName("192.168.1.66"), 12345);
    			//调用DatagramSocket对象的方法发送数据
    			ds.send(dp);
    		}
    		//关闭发送端
    		ds.close();
    	}
    }
    
    /*
    	UDP接收数据:
    	因为接收端不知道发送端什么时候停止发送,故采用死循环接收
    */
    public class ReceiveDemo {
    	public static void main(String[] args) throws IOException {
    		//创建接收端的Socket对象(DatagramSocket)
    		DatagramSocket ds = new DatagramSocket(12345);
    		while (true) {
    			//创建一个数据包,用于接收数据
    			byte[] bys = new byte[1024];
    			DatagramPacket dp = new DatagramPacket(bys, bys.length);
    			//调用DatagramSocket对象的方法接收数据
    			ds.receive(dp);
    			//解析数据包,并把数据在控制台显示
    			System.out.println("数据是:" + new String(dp.getData(), 0,
    			dp.getLength()));
    		}
    		//关闭接收端
    		// ds.close();
    	}
    }
    

4. UDP三种通讯方式

  • 单播
    单播用于两个主机之间的端对端通信
  • 组播
    组播用于对一组特定的主机进行通信
  • 广播
    广播用于一个主机对整个局域网上所有主机上的数据通信

在这里插入图片描述

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

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

相关文章

Doris的一些进阶用法

6.doris进阶 6.1修改表 6.1.1修改表名 示例: 将名为 table1 的表修改为 table2 SQLALTER TABLE table1 RENAME table2; -- 示例 ALTER TABLE aggregate_test RENAME aggregate_test1; 将表 example_table 中名为 rollup1 的 rollup index 修改为 rollup2 SQLA…

V2board 1.6.1 提权漏洞(web缓存投毒)

目录 复现环境: 漏洞产生的原因: 漏洞的利用以及复现: 复现环境: 在gethub中直接拉去docker镜像 vulhub/README.zh-cn.md at master vulhub/vulhub GitHub 漏洞产生的原因: 前端的认证方式与后端并没有进行区分…

【LeetCode热题100】打卡第9天:电话号码的字母组合

文章目录 电话号码的字母组合⛅前言🔒题目🔑题解 电话号码的字母组合 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目&#xf…

本地运行 LLAMA GPT-3.5-TURBO开源项目

git: nomic-ai/gpt4all: gpt4all: an ecosystem of open-source chatbots trained on a massive collections of clean assistant data including code, stories and dialogue (github.com) 下载好源码后,的目录结构: 视频中说的 chat 目录…

视图和用户管理

目录 视图基本使用视图规则和限制 用户管理用户用户信息创建用户删除用户修改用户密码 数据库的权限给用户授权回收权限 视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&…

基于Python的接口自动化-构建mock接口服务

引言 Mock 即模拟,就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,其最大的优势就是降级前后端耦合度, 使前端工程师可以不依赖后端返回数据,先开发前…

堆排序及top k 问题

目录 一:堆排序 1.向上调整建堆 2.向下调整建堆 3.向上调整建堆时间复杂度 4.向下调整建堆时间复杂度 二:找 top k 问题 1.造数据 2.进行建堆,查找最大的K个数据 一:堆排序 升序 --- 建大堆 --- 每个父亲节点 > 孩子节…

高德API JS 高德地图获取多个坐标点的中心点

高德API JS 高德地图获取多个坐标点的中心点 一、需求 我需要在地图上展示多个地点,并且展示的同时,地图缩放到合适的大小,要求刚好能显示全部点位,并且边缘留有一部分间隔。 做成如图所示这样。 二、需要用到的 AMap 类库 经…

使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图

这篇博客将介绍如何使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图。 使用Python绘制端午dragboat消消乐 美轮美奂的界面效果 1. 效果图 6.1儿童节快乐原始图VS素描图: 素描进阶…

内网穿透-公网ip-方法总结-访问内网服务器-frp-虚拟服务器

文章目录 1.固定IP2.虚拟服务器转发3.IP盒子4.总结 1.固定IP 第一种方式是向三大电信服务商购买专用通道,固定IP,这种方式是最正统,也是各大虚拟服务器服务商采用的方式,宽带带宽有稳定的保障。在访问量不足的前提下,…

anaconda 安装_Linux系统上

安装流程 1 下载安装包 官网 https://www.anaconda.com/download#downloads 2 执行安装 bash Anaconda3-2021.11-Linux-x86_64.sh3 安装过程 一路enteryes,接受licence、指定安装路径和init之后安装完成。 检验anaconda是否安装成功。 conda --version或 con…

【LeetCode】12,整数转罗马数字。 难度等级:中等。易错点:使用 python 字典构建哈希表时要考虑哈希表是否有序

文章目录 一、题目二、我的解法:基于有序哈希表的贪心算法2.1 使用 dict 构建哈希表2.2 使用两个 list / tuple 构建有序哈希表 一、题目 二、我的解法:基于有序哈希表的贪心算法 2.1 使用 dict 构建哈希表 贪心法则:我们每次尽量使用最大的…

基于AT89C52单片机的多功能万年历设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853675 源码获取 目 录 摘 要 1 1 方案论证 2 1.1 单片机芯片的选择方案和论证 2 1.2 显示模块选择方案和论证 2 1.3 时钟芯片的选择方案和论证 3 1.4 电路设计…

BitLocker加密卷“恢复密钥(数字密码)”提取还原

BitLocker是微软Windows自带的用于加密磁盘分卷的技术。 通常,解开后的加密卷通过Windows自带的命令工具“manage-bde”可以查看其恢复密钥串,如下图所示: 如图,这里的数字密码下面的一长串字符串即是下面要提取恢复密钥。 在计…

IMA/EVM完整性检测代码分析

IMA/EVM完整性检测 IMA(Integrity Measurement Architecture)是一个内核安全子系统,用于检测文件或数据的完整性和安全性。IMA的hook机制指的是内核接口钩子(kernel interface hooks),用于向IMA注册和实现…

第三章 部署Web及WDS服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 一.什么是web 1.www(world wide web)万维网 世界 维度 2.www服务软件 3.info…

ElementUI-Form表单二次封装

一、Form组件二次封装考虑组件构成: form组件:input text passworldselectcheckboxradio文本域日期 二、实现Form表单的二次封装: 1. 分析出对应的位置 开始抽离组件 2. 如果需要产生多个form表单,则需要产生多个el-form-item…

学习路之gis--百度离线地图下载制作

在有些情况下需要使用地图,但又不能访问外网,这时你需要一个离线地图。本文介绍如何制作百度离线地图。 下面将介绍如何实现一个离线版百度地图: 1. 下载百度地图瓦片 下载网址:望远网-百度地图下载 首先需选择下载地图瓦片的样式…

BUG: scheduling while atomic: fpv_cams/605/0x00010001

IIO框架下IMU驱动的接口在定时器中断内调用报错,因调用IO读定时间较长会导致睡眠的发生,因为内核总是崩。 尝试了几种解决方法: 1.在IIO框架里,使用 spidev 的接口来读写,错误依旧; 2.去掉IIO框架&#x…

香橙派One(全志H3芯片)编译烧写U-boot、Linux内核zImage、dtb

一、编译烧写u-boot 1.1 源码和工具下载: 香橙派提供了u-boot源码和交叉编译链工具: (1)u-boot(2020.04)下载地址:https://github.com/orangepi-xunlong/u-boot-orangepi (2&#…