224.0.0.0到239.255.255.255 这些都叫组播地址
我举个 不太严谨 的例子
有几个主机已经加入了 224.1.1.1 这个组
192.168.1.1---192.168.1.2---192.168.1.3---比如这三个ip地址加入了组224.1.1.1
然后组播源10.1.1.1--- 向224.1.1.1 这个组地址发送信息的时候 那几个加入组的主机都会收到组播源发送的信息 ...如果你用icmp来检测的话 组播源10.1.1.1 ping 224.1.1.1是可以通的 就证明组播通了也就是下面的组员接收到了组播信息
So 我们来进行多播的配置工作
首先:
ifconfig -a
当我们检验eth0时未看见MULTICAST ,我们需要输入指令使其出现:
ifconfig eth0 multlicast
那么问题来了 新版本中没有eth0,而是eno16777736,So:我们需要将eno16777736改为eth0
解决方法:http://jingyan.baidu.com/article/6181c3e081f178152ef1538f.html
好了,现在已经启用多播了。现在需要新增D级多播网络的IP路由。那么需要新增下列路径:
#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
那么什么是D级多播地址
D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以"1110"开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicasting)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
D类的IP地址不标识网络,其地址覆盖范围为224.0.0.0~239.255.255.255。
接下来我们可用单一机器或局域网上两台机器测试IP多播的Java程序,如下:
import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import javax.swing.text.Utilities; public class MulticastNode { InetAddress group = null; MulticastSocket s = null; public static void main(String[] args) { if (args.length > 0) { System.out.println("Sending message:" + args[0]); MulticastNode node = new MulticastNode(); node.send(args[0]); node.receive(); } else { System.out.println("Need an argument string to send."); System.exit(1); } } public MulticastNode() { try { group = InetAddress.getByName("224.0.0.1"); s = new MulticastSocket(45564); s.joinGroup(group); } catch (Exception e) { e.printStackTrace(); } } public void send(String msg) { try { DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 45564); s.send(hi); } catch (Exception e) { e.printStackTrace(); } } public void receive() { byte[] buf; while (true) { try { buf = new byte[1000]; DatagramPacket recv = new DatagramPacket(buf, buf.length); s.receive(recv); System.out.println("Received:" + new String(buf)); } catch (Exception e) { e.printStackTrace(); } } } }
这个java程序主要需要注意group =
InetAddress.getByName("224.0.0.1");这句话,其中这个地址指的是你的多播地址,而不是你的ip地址,我是通过不同ip地址的主机加入统一多播地址224.0.0.1(如果你的程序报not
a Multicast address,则需要看见面多播地址如何查询)
多播地址查询方法为:
netstat -gn
将这个java程序打成jar包放入linux或window中,通过输入
1.
java -jar Mult.jar NodeOne
(请改成你的jar包名字)
2.
java -jar Mult.jar NodeTwo
效果应为 Sending
message: NodeOne
Received:NodeOne
Received: NodeTwo
我用window测试的,linux上的结果都一样,效果图如下:
本文出自 “底蕴” 博客,请务必保留此出处http://10146719.blog.51cto.com/10136719/1836886
原文地址:http://10146719.blog.51cto.com/10136719/1836886