2021-04-18 11:30  阅读(66)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-network-tcp-server.html

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

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

202104181131_1.png

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

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

202104181131_2.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 网络UDP多播
上一篇
Java 网络UDP服务器
下一篇
Java URL