多播技术是一种允许一台或多台主机在同一时间发送单一的数据包到多台主机的网络技术。多播源将数据包发送到特定多播组,只有属于该多播组的主机才能接收到数据包。这些主机可以是在同一个物理网络,也可以来自不同的物理网络(只要有多播路由器支持)。
很明显多播是无连接和不可靠的,所以它使用UDP协议。
我们说过使用MulticastSocket类,这个类叫多播数据报套接字类,主要用于发送和接收IP多播包。MulticastSocket是DatagramSocket的子类,只不过它具有加入Internet上的多播组的功能。多播组通过D类地址(这些IP地址的范围是224.0.0.0和239.255.255.255,除了224.0.0.0是保留地址,不应使用。)和标准UDP端口号指定。
下面我们用一个简单的示例演示两个进程如何使用多播进行通信,这两个进程一个是发送端进程,另一个是接收端进程。
我们看代码:
Sender.java
import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class Sender { public static void main(String[] args) { try { byte[] msg = new byte[] { ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘ }; InetAddress inetAddress = InetAddress.getByName("230.0.0.1");//根据主机名返回主机的IP地址 DatagramPacket datagramPacket = new DatagramPacket(msg, msg.length, inetAddress, 7777);//数据包包含消息内容,消息长度,多播IP和端口 MulticastSocket multicastSocket = new MulticastSocket(); multicastSocket.send(datagramPacket);//发送数据包 } catch (Exception exception) { exception.printStackTrace(); } } }
Receiver.java
import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class Receiver { public static void main(String[] arstring) { try { MulticastSocket multicastSocket = new MulticastSocket(7777);//创建多播套接字并绑定到发送端口 InetAddress inetAddress = InetAddress.getByName("230.0.0.1"); multicastSocket.joinGroup(inetAddress);//多播套接字加入多播组 while (true) { byte[] data = new byte[100]; DatagramPacket datagramPacket = new DatagramPacket(data,data.length);//创建一个用于接收数据的数据包 multicastSocket.receive(datagramPacket);//接收数据包 System.out.println(new String(data)); } } catch (Exception exception) { exception.printStackTrace(); } } }
使用MulticastSocket实现多播的要点在于:
1.将接收者加入多播组;
2.发送包含目标主机地址的数据报。
还有一个问题,多播的“多”体现在哪里呢?
必须是MulticastSocket。
MulticastSocket提供了3个构造方法:
public MulticastSocket()
public MulticastSocket(int portNumber)
public MulticastSocket(SocketAddress bindaddr)
通过指定不同IP就可以播到很多台主机了。
使用MulticastSocket实现多播,布布扣,bubuko.com
原文:http://blog.csdn.net/whoami021/article/details/21337651