组播示例

发送端

package com.aaa.zubo;

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.Date;

public class ZuClass {
	public static void main(String[] args) throws Exception {
		//组播地址
		InetAddress group = InetAddress.getByName("239.0.0.5");
		//组播端口
		int port = 19999;
		MulticastSocket mss = null;
		//创建一个套接字对象
		mss = new MulticastSocket(port);
		
		//使用组播套接字,加入到组播
		mss.joinGroup(group);
		// 开始按照一定的周期向加入到224.0.0.5的其他activemq服务器节点进行广播
		Thread thread = Thread.currentThread();
		while(!thread.isInterrupted()) {
			//send方法
			
			String message = new Date()+"我是一个activemq节点";
			byte [] buffer2 = message.getBytes();
			DatagramPacket dp = new DatagramPacket(buffer2, buffer2.length,group,port);
			
			
			mss.send(dp);
			System.out.println("发起组播: "+message);
			synchronized (ZuClass.class) {
				ZuClass.class.wait(5000);
			}
		}
		mss.close();
	}
}

接收端:

package com.aaa.zubo;

import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ZuRecive {
	public static void main(String[] args) throws Exception {
		MulticastSocket ms = new MulticastSocket(19999);
		InetAddress ad = InetAddress.getByName("239.0.0.5");
		ms.joinGroup(ad);
		byte [] datas = new byte[2048];
		DatagramPacket data = new DatagramPacket(datas, 2048,ad,19999);
		Thread thread = Thread.currentThread();
		System.out.println("开始接收组播消息....");
		while(!thread.isInterrupted()) {
			ms.receive(data);
			int length = data.getLength();
			System.out.println(new String(data.getData(),0,length,"UTF-8"));
		}
		ms.close();
	}
}

可以启动多个接收端.
发送端和接收端的启动顺序无所谓.

关于组播:

在IP协议中,规定的D类IP地址为组播地址。224.0.0.0~239.255.255.255这个范围内的IP都是D类IP地址,其中有一些IP段是保留的有特殊含义的:

224.0.0.0~224.0.0.255:这个D类IP地址段为保留地址,不建议您在开发过程中使用,因为可能产生冲突。例如224.0.0.5这个组播地址专供OSPF协议(是一种路由策略协议,用于找到最优路径)使用的组播地址;224.0.0.18这个组播地址专供VRRP协议使用(VRRP协议是虚拟路由器冗余协议)。

224.0.1.0~224.0.1.255:这个D类IP地址为公用组播地址,用于在整个Internet网络上进行组播。除非您有*DNS的控制/改写权限,否则不建议在局域网内使用这个组播地址断。

239.0.0.0~239.255.255.255:这个D类IP地址段为推荐在局域网内使用的组播地址段。注意,如果要在局域网内使用组播功能,需要局域网中的交换机/路由器支持组播功能。幸运的是,目前市面上只要不是太过低端的交换机/路由器,都支持组播功能(组播功能所使用的主要协议为IGMP协议,关于IGMP协议的细节就不再进行深入了)。

上一篇:JAVA网络编程-第四章(InetAddress类)


下一篇:用idea查看本机IP