利用MulticastSocket来进行局域网的组播及网间的遐想

超级本本降价风暴

  之前也写了一个类似飞鸽的小软件,但写得不是很完整,现在也懒得再去动它了.现在回顾下multicastSocket这个类,以备不时之需.

 MulticastSocket是种多播,也叫组播.而广播的概念更广.是所有组播放的总合.目前还是很难实现的.因为包的生存一般只在一个router下就over了,如果要让它生存下来,第一就是这个router支持转发.另外就是设置ttl大于1,因为ttl每经过一个router它就会减1,直到它小于0为止.就不再转发.Multicast 它是种UDP,具有加入internet上其他多播主机的"组"的功能.

以下摘自API:

// join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
                             group, 6789);
 s.send(hi);
 // get their responses!
byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group);

 

此时只要加入这个组播组和这个端口就可以收到任何人发的包的.

 

网间:

  跨网间之间的通讯则会比较难于实现,就像飞鸽,如果是跨网段的话,就会找不到这个人,此时我们可以通过添加"要广播主机地址"来完成,它就会给该地址发UDP包.

 假如A地址是172.114.2.3而B地址是172.114.4.2那么它两个就是在不同的网段,而此时我们又不想通过加IP,而让A自动去寻找B.要怎么实现呢?

 一个想法就是一个个的去发包,通过for循环给从172.114.1.1到172.114.255.255一个个的发包,这样大概算起来要65535个包,如果收到了就给回应,取消发包,这样也是可以找到我们要找的人了.

代码实现如下:(假如我们知道IP范围是在100到125之间,我们一个个的人工去给它们发包了.)

  

for (int i = 100; i < 125; i++) {
                    group = InetAddress.getByName("192.168.1."+i);
                    ms.send(Util.getDataPacket(group, MULTICAST_PORT, MULTICAST_TEST));
 }

 

你可能感兴趣的:(socket)