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

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();}}
}

相关文章:

  • Axure元件动作四:设置选中
  • 为 Spring Boot 应用程序构建 CI/CD 流水线
  • 3、函数和约束
  • 2025B难题练习
  • ecmascript 第6版特性 ECMA-262 ES6
  • 数据库的规范化设计方法---3种范式
  • scss additionalData Can‘t find stylesheet to import
  • WebXR教学 07 项目5 贪吃蛇小游戏
  • 阿里巴巴开源移动端多模态LLM工具——MNN
  • 北京市工程技术人才职称评价基本标准条件解读
  • 力扣HOT100之二叉树:98. 验证二叉搜索树
  • JAVA的常见API文档(上)
  • AtCoder AT_abc406_c [ABC406C] ~
  • 蓝牙耳机什么牌子好?倍思值得冲不?
  • Typecho博客为文章添加AI摘要功能(Handsome主题优化版)
  • AGI大模型(20):混合检索之rank_bm25库来实现词法搜索
  • Redis配置与优化:提升NoSQL数据库性能的关键策略
  • 【AI算法工程师面试指北】ResNet为什么用avgpool结构?
  • 超长文本能取代RAG吗
  • 图像超分-CVPR2022-Multi-scale Attention Network for Single Image Super-Resolution
  • 海外市场,押注中国无人驾驶龙头
  • 新华时评:让医德医风建设为健康中国护航
  • 龚正市长调研闵行区,更加奋发有为地稳增长促转型,久久为功增强发展后劲
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • “75万买299元路由器”事件进展:重庆市纪委等三部门联合介入调查
  • 上海北外滩开发建设五周年交出亮眼答卷,未来五年有何新目标?