Java 網(wǎng)絡(luò)UDP多播

2018-02-28 16:54 更新

Java網(wǎng)絡(luò)教程 - Java網(wǎng)絡(luò)UDP多播


Java使用MulticastSocket類來創(chuàng)建UDP多播套接字,以接收發(fā)送到多播IP地址的數(shù)據(jù)包。

組播套接字基于組成員資格。創(chuàng)建并綁定組播套接字后,調(diào)用其joinGroup(InetAddress multiCastIPAddress)方法加入組播組,發(fā)送到該組的任何數(shù)據(jù)包數(shù)據(jù)包將被傳遞到此套接字。

要離開組,請調(diào)用leaveGroup(InetAddress multiCastIPAddress)方法。

在IPv4中,范圍224.0.0.0到239.255.255.255中的任何IP地址都可以用作組播地址來發(fā)送數(shù)據(jù)報。

IP地址224.0.0.0保留,您不應(yīng)在您的應(yīng)用程序中使用它。

組播IP地址不能用作數(shù)據(jù)包的源地址。


例子

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

上面的代碼生成以下結(jié)果。


例2

UDP數(shù)據(jù)報套接字,多播發(fā)送方應(yīng)用程序。

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

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號