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

UDP三种通信方式

单播(Unicast)

单播是最常见的通信方式,数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP地址和端口号,接收方通过监听指定的端口接收数据。单播适用于一对一的通信场景。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPSender {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket();String message = "Hello, World!";byte[] buffer = message.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 12345);socket.send(packet);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

接收方

import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UDPReceiver {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket(12345);byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String receivedMessage = new String(packet.getData(), 0, packet.getLength());System.out.println(receivedMessage);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

广播(Broadcast)

广播是将数据包发送到同一网络中的所有设备。发送方将数据包发送到广播地址(如255.255.255.255),所有在同一网络中的设备都能接收到该数据包。广播适用于一对多的通信场景,但会占用大量网络带宽。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPSender {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket();socket.setBroadcast(true);String message = "Hello, Everyone!";byte[] buffer = message.getBytes();DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 12345);socket.send(packet);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

接收方代码

import java.net.DatagramPacket;
import java.net.DatagramSocket;public class UDPReceiver {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket(12345);byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String receivedMessage = new String(packet.getData(), 0, packet.getLength());System.out.println(receivedMessage);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

组播(Multicast)

组播是将数据包发送到一组特定的设备。发送方将数据包发送到组播地址(如224.0.0.1),只有加入该组播组的设备才能接收到数据包。组播适用于一对多的通信场景,且比广播更节省网络带宽。

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class MulticastSender {public static void main(String[] args) {try {InetAddress group = InetAddress.getByName("224.0.0.1");MulticastSocket socket = new MulticastSocket();String message = "Hello, Group!";DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), group, 12345);socket.send(packet);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

接收方

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class MulticastReceiver {public static void main(String[] args) {try {InetAddress group = InetAddress.getByName("224.0.0.1");MulticastSocket socket = new MulticastSocket(12345);socket.joinGroup(group);byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);String received = new String(packet.getData(), 0, packet.getLength());System.out.println(received);socket.leaveGroup(group);socket.close();} catch (Exception e) {e.printStackTrace();}}
}

http://www.lryc.cn/news/2380515.html

相关文章:

  • 4-5月份,思科,华为,微软,个别考试战报分享
  • 计算机网络-HTTP与HTTPS
  • 信号波形发生器电路Multisim仿真
  • 深入解析Java微服务架构:Spring Boot与Spring Cloud的整合实践
  • 医学影像辅助诊断系统开发教程-基于tensorflow实现
  • 前端单点登录
  • Spring AI 介绍
  • onlyoffice 源码 调试说明 -ARM和x86双模式安装支持
  • EXCEL在一列数据前统一添加负号
  • 从零开始打造个人主页:HTML/CSS/JS实战教程
  • UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings
  • 高等数学基础(牛顿/莱布尼茨公式)
  • Node.js路径处理指南:如何安全获取当前脚本目录路径
  • RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试
  • 2025年渗透测试面试题总结-华顺信安[实习]安全服务工程师(题目+回答)
  • 按键精灵ios/安卓辅助工具高级函数OcrEx文字识别(增强版)脚本开发介绍
  • Unity3D HUD UI性能优化方案
  • 掌握Git:版本控制与高效协作指南
  • VsCode和AI的前端使用体验:分别使用了Copilot、通义灵码、iflyCode和Trae
  • 交叉熵损失函数,KL散度, Focal loss
  • php、laravel框架下如何将一个png图片转化为jpg格式
  • 足式机器人经典控制常用的ROS库介绍
  • 在tp6模版中加减法
  • 【Part 3 Unity VR眼镜端播放器开发与优化】第一节|基于Unity的360°全景视频播放实现方案
  • Python打卡DAY30
  • IDEA连接github(上传项目)
  • 重构研发效能:项目管理引领软件工厂迈向智能化
  • 基于 STM32 单片机的实验室多参数安全监测系统设计与实现
  • Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案
  • 小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解