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é)果。
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é)果。
更多建議: