UDP通信:快速入门

news/2025/3/22 11:31:10/

UDP协议通信模型演示

UDP API

DatagramPacket:数据包对象(韭菜盘子) 

public DatagramPacket(byte[] buf, int length, InetAddress address, int port)创建发送端数据包对象 buf:要发送的内容,字节数组 length:要发送内容的字节长度 address:接收端的IP地址对象 port:接收端的端口号
public DatagramPacket(byte[] buf, int length)创建接收端的数据包对象 buf:用来存储接收的内容 length:能够接收内容的长度
public int getLength()获得实际接收到的字节个数

 DatagramSocket:发送端和接收端对象(人)

public DatagramSocket()创建发送端的Socket对象,系统会随机分配一个端口号。
public DatagramSocket(int port)创建接收端的Socket对象并指定端口号
public void send(DatagramPacket dp)发送数据包
public void receive(DatagramPacket p)接收数据包

使用UDP通信实现:发送消息、接收消息

客户端实现步骤

创建DatagramSocket对象(发送端对象)                      扔韭菜的人

创建DatagramPacket对象封装需要发送的数据(数据包对象)                 韭菜盘子

使用DatagramSocket对象的send方法传入DatagramPacket对象                 开始抛出韭菜

释放资源

接收端实现步骤

创建DatagramSocket对象并指定端口(接收端对象)                      接韭菜的人

创建DatagramPacket对象接收数据(数据包对象)                 韭菜盘子

使用DatagramSocket对象的receive方法传入DatagramPacket对象                 开始接收韭菜

释放资源

代码实现

/**发送端  一发 一收*/
public class ClientDemo1 {public static void main(String[] args) throws Exception {System.out.println("=====客户端启动======");// 1、创建发送端对象:发送端自带默认的端口号(人)DatagramSocket socket = new DatagramSocket(6666);// 2、创建一个数据包对象封装数据(韭菜盘子)/**public DatagramPacket(byte buf[], int length,InetAddress address, int port)参数一:封装要发送的数据(韭菜)参数二:发送数据的大小参数三:服务端的主机IP地址参数四:服务端的端口*/byte[] buffer = "我是一颗快乐的韭菜,你愿意吃吗?".getBytes();DatagramPacket packet = new DatagramPacket( buffer, buffer.length,InetAddress.getLocalHost() , 8888);// 3、发送数据出去socket.send(packet);socket.close();}
}
/**接收端*/
public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("=====服务端启动======");// 1、创建接收端对象:注册端口(人)DatagramSocket socket = new DatagramSocket(8888);// 2、创建一个数据包对象接收数据(韭菜盘子)byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);// 3、等待接收数据。socket.receive(packet);// 4、取出数据即可// 读取多少倒出多少int len = packet.getLength();String rs = new String(buffer,0, len);System.out.println("收到了:" + rs);// 获取发送端的ip和端口String ip  =packet.getSocketAddress().toString();System.out.println("对方地址:" + ip);int port  = packet.getPort();System.out.println("对方端口:" + port);socket.close();}
}


http://www.ppmy.cn/news/1150662.html

相关文章

Java架构师缓存架构设计解决方案

目录 1 缓存常见的三大问题1.1 缓存雪崩1.2 缓存穿透1.3 缓存击穿2 缓存key的生成策略3 热点数据集中失效的问题4 如何提高缓存的命中率5 缓存和数据库双写不一致的问题6 如何对缓存数据进行分片1 缓存常见的三大问题 缓存雪崩、缓存穿透和缓存击穿是缓存系统中常见的三大问题,…

2023 年 Arm A-Profile 架构发展

随着人工智能 (AI) 的兴起和安全威胁的加剧,计算需求不断发展,作为世界设备核心的基础计算架构也必须不断发展。这就是为什么我们的工程团队向普遍存在的 Arm 架构添加新功能和技术,然后软件团队确保软件尽可能无缝地适应这些未来的功能和技术。 Arm架构是如何开发的 Arm …

【OpenCV-PyQt5-PyGame-imutils】探索Python中的图像和视频捕获:性能分析与选择指南

前言 随着计算机视觉和多媒体应用的不断发展,图像和视频捕获变得越来越重要。在Python中,有多种库和工具可供选择,用于打开摄像头、捕获图像、以及处理视频流。本文旨在为读者提供对这些捕获方法的全面了解,并介绍如何计算平均帧…

Spring Boot 中的 Redis 数据操作配置和使用

Spring Boot 中的 Redis 数据操作配置和使用 Redis(Remote Dictionary Server)是一种高性能的开源内存数据库,用于缓存、消息队列、会话管理和数据存储。在Spring Boot应用程序中,Redis被广泛用于各种用例,包括缓存、…

网络监控与故障排除:netstat命令的使用指南

文章目录 概述什么是 netstat 命令?netstat 命令的作用和功能netstat 命令的常见用途 安装和基本用法安装 netstat 命令netstat 命令的基本语法查看活动网络连接 查看网络接口信息查看所有网络接口信息查看指定网络接口信息网络接口状态说明 网络连接状态显示所有连…

C# AnimeGANv2 人像动漫化

效果 项目 下载 可执行程序exe下载 源码下载 其他 C# 人像卡通化 Onnx photo2cartoon-CSDN博客

看一下链表结构

序、慢慢来才是最快的方法。 背景 链表(Linked List) 链表是一种常见的基础数据结构,是一种线性表。与顺序表不同的是,链表中的每个节点不是顺序存储的,而是通过节点的指针域指向到下一个节点。 1.链表的优缺点 2.链表的类型 单链表、双链表…

STM32是什么意思?

ST 意法半导体,是一个公司的名字 M Microelectronics 的缩写,表示微控制器,要注意微控制器和微处理器 的区别 32 32bit的意思