当前位置: 首页 > news >正文

UDP 协议下一发一收通信程序的实现与解析

在网络通信的世界里,UDP 协议以其简洁高效的特点占据着重要地位。它无需建立连接,数据传输速度快,非常适合对实时性要求较高但对数据完整性要求相对宽松的场景。本文将详细解析一个基于 UDP 协议的一发一收通信程序,带你了解其背后的实现原理与代码细节。

程序设计思路

本次实现的 UDP 一发一收程序主要包含客户端和服务器端两个部分。其核心思路是:客户端创建数据并打包发送给指定端口的服务器端,服务器端监听该端口,接收客户端发来的数据并进行解析处理,最后获取客户端的相关信息。整个过程无需建立持久连接,数据的发送和接收通过数据报的形式完成。

客户端代码实现

客户端的主要任务是创建数据并发送给服务器端,具体代码如下:

package com.practical.agreement.utp.utp_1;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*
@description:目标:完成UDP通信快速入门:实现1发1收。
@ClassName Client 客户端
@author chen
@create 2025-07-18 14:22
@Version 1.0
*/
public class Client
{public static void main(String[] args) throws Exception{// 1、创建客户端对象DatagramSocket socket = new DatagramSocket();// 2、创建数据,并把数据打包byte[] data = "客户端数据".getBytes();// 客户端数据int length = data.length;// 数据长度InetAddress ip = InetAddress.getLocalHost();// 服务器地址int port = 8888;// 服务器端口DatagramPacket packet = new DatagramPacket(data,length,ip,port);socket.send(packet);System.out.println("客户端数据发送完毕~~~");socket.close();}
}

在客户端代码中,首先创建了DatagramSocket对象,它是客户端发送数据的关键。然后将需要发送的字符串 “客户端数据” 转换为字节数组,这是因为网络传输的数据是以字节形式存在的。接着,确定服务器的地址(这里使用本地主机)和端口号(8888),并将数据、数据长度、服务器地址和端口号打包到DatagramPacket对象中。最后,通过send方法将数据报发送出去,并关闭DatagramSocket释放资源。

服务器端代码实现

服务器端的主要职责是监听指定端口,接收客户端发来的数据并进行处理,代码如下:

package com.practical.agreement.utp.utp_1;
/*
@description:
@ClassName Server
@author chen
@create 2025-07-18 14:22
@Version 1.0
*/
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Server
{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);System.out.println(packet.getAddress().getHostAddress());System.out.println(packet.getPort());socket.close(); // 释放资源}
}

服务器端首先创建DatagramSocket对象并注册端口 8888,以便监听来自该端口的数据。然后创建一个字节数组作为缓冲区,并将其封装到DatagramPacket对象中,用于接收客户端发来的数据。调用receive方法后,服务器端会进入阻塞状态,等待客户端发送数据。当接收到数据后,通过getLength方法获取实际接收的数据长度,再将字节数组转换为字符串并打印出来。同时,还可以通过getAddress和getPort方法获取客户端的 IP 地址和端口号,最后关闭DatagramSocket释放资源。

程序运行效果与意义

运行该程序时,先启动服务器端,此时服务器端会显示 “---- 服务端启动 ----” 并进入等待状态。接着启动客户端,客户端会发送数据并显示 “客户端数据发送完毕~~~”。服务器端接收到数据后,会打印出 “客户端数据” 以及客户端的 IP 地址和端口号。

这个简单的 UDP 一发一收程序虽然功能基础,但却清晰地展示了 UDP 协议的通信过程。它让我们直观地了解到无连接通信的特点,为后续学习更复杂的网络通信程序打下了坚实的基础。在实际应用中,这样的通信模式可以用于实时聊天、游戏数据传输等场景,为各类网络应用提供了高效的数据传输方式。

http://www.xdnf.cn/news/1143523.html

相关文章:

  • 防爆手机是什么?能用普通手机改装吗?
  • 免费PDF文件格式转换工具
  • FastAdmin框架超级管理员密码重置与常规admin安全机制解析-卓伊凡|大东家
  • python学智能算法(二十三)|SVM-几何距离
  • react控制react Popover组件显示隐藏
  • 【怜渠客】简单实现手机云控Windows电脑锁屏
  • 力扣面试150(33/150)
  • pytest + requests 接口自动化测试框架
  • UE 一些基础的python
  • AE MDX L6 L12 L18 电源手侧操作使用说明
  • 在git中同时配置gitcode和github访问权限
  • 40.限流规则
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件让课堂更高效安全
  • openinstall九周年:聚焦安全防御,护航业务持续增长
  • 注册表单案例
  • 低空感知技术
  • 服务端高并发方案设计
  • python学智能算法(二十四)|SVM-最优化几何距离的理解
  • git--gitlab
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - jieba库分词简介及使用
  • Python函数全解析:从基础到高阶实战
  • 无符号乘法运算的硬件逻辑实现 ————取自《湖科大教书匠》
  • 【面试】面试官:请举例回答Elasticsearch的数据模型有哪些核心概念?
  • VSCode - VSCode 快速跳转标签页
  • setTimeout、setInterval、requestAnimationFrame的使用以及区别
  • 广东省省考备考(第四十九天7.18)——资料分析(知识点回顾与练习)
  • centos7安装MySQL8.4手册
  • 产品需求文档(PRD)格式全解析:从 RP 到 Word 的选择与实践
  • 【服务器与部署 12】数据库生产环境部署实战:MySQL、PostgreSQL、Redis高可用配置全攻略
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件