第三百三十一节 Java网络教程 - Java网络UDP多播

Java网络教程 - Java网络UDP多播

Java使用MulticastSocket类来创建UDP多播套接字,以接收发送到多播IP地址的数据包。

组播套接字基于组成员资格。创建并绑定组播套接字后,调用其joinGroup(InetAddress multiCastIPAddress)方法加入组播组,发送到该组的任何数据包数据包将被传递到此套接字。

要离开组,请调用leaveGroup(InetAddress multiCastIPAddress)方法。

在IPv4中,范围224.0.0.0到239.255.255.255中的任何IP地址都可以用作组播地址来发送数据报。

IP地址224.0.0.0保留,您不应在您的应用程序中使用它。

组播IP地址不能用作数据包的源地址。

例子

接收UDP组播消息的UDP组播套接字。

复制代码
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class Main {
  public static void main(String[] args) throws Exception {
    int mcPort = 12345;
    String mcIPStr = "230.1.1.1";
    MulticastSocket mcSocket = null;
    InetAddress mcIPAddress = null;
    mcIPAddress = InetAddress.getByName(mcIPStr);
    mcSocket = new MulticastSocket(mcPort);
    System.out.println("Multicast Receiver running at:"
        + mcSocket.getLocalSocketAddress());
    mcSocket.joinGroup(mcIPAddress);

    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);

    System.out.println("Waiting for a  multicast message...");
    mcSocket.receive(packet);
    String msg = new String(packet.getData(), packet.getOffset(),
        packet.getLength());
    System.out.println("[Multicast  Receiver] Received:" + msg);

    mcSocket.leaveGroup(mcIPAddress);
    mcSocket.close();
  }
}

上面的代码生成以下结果。

例2

UDP数据报套接字,多播发送方应用程序。

复制代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Main {
  public static void main(String[] args) throws Exception {
    int mcPort = 12345;
    String mcIPStr = "230.1.1.1";
    DatagramSocket udpSocket = new DatagramSocket();

    InetAddress mcIPAddress = InetAddress.getByName(mcIPStr);
    byte[] msg = "Hello".getBytes();
    DatagramPacket packet = new DatagramPacket(msg, msg.length);
    packet.setAddress(mcIPAddress);
    packet.setPort(mcPort);
    udpSocket.send(packet);

    System.out.println("Sent a  multicast message.");
    System.out.println("Exiting application");
    udpSocket.close();
  }
}

上面的代码生成以下结果。

相关推荐
小白自救计划3 分钟前
网络协议分析 实验七 FTP、HTTP、DHCP
网络·网络协议·http
z人间防沉迷k13 分钟前
互联网协议的多路复用、Linux系统的I/O模式
linux·网络·http
c语言中的小小白17 分钟前
【Linux网络】————详解TCP三次握手四次挥手
网络·网络协议·tcp/ip
9527华安29 分钟前
紫光同创FPGA实现AD9280数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机
网络·fpga开发·udp·紫光同创·qt上位机·ad9280
带刺的坐椅29 分钟前
SpringBoot2 可以使用 SolonMCP 开发 MCP(江湖救急)
java·spring·ai·solon·mcp
shengjk138 分钟前
序列化和反序列化:从理论到实践的全方位指南
java·大数据·开发语言·人工智能·后端·ai编程
jimsten40 分钟前
苍穹外卖 - Day02 学习笔记
java·笔记·学习
工业互联网专业40 分钟前
基于springboot+vue的医院门诊管理系统
java·vue.js·spring boot·毕业设计·源码·课程设计·医院门诊管理系统
wgc2k43 分钟前
Java游戏服务器开发流水账(5)Spring 在游戏开发中的使用简介
java·服务器·游戏
龙猫略略略1 小时前
转发多台px4仿真UDP数据到地面站
udp·px4