当前位置: 移动技术网 > IT编程>开发语言>Java > IP组播 MulticastChannel接口 DatagramChannel实现

IP组播 MulticastChannel接口 DatagramChannel实现

2018年10月03日  | 移动技术网IT编程  | 我要评论

监听者

 1 import java.io.ioexception;
 2 import java.net.inetaddress;
 3 import java.net.inetsocketaddress;
 4 import java.net.networkinterface;
 5 import java.net.standardprotocolfamily;
 6 import java.net.standardsocketoptions;
 7 import java.nio.bytebuffer;
 8 import java.nio.channels.channels;
 9 import java.nio.channels.datagramchannel;
10 import java.nio.channels.multicastchannel;
11 import java.nio.channels.writablebytechannel;
12 import java.util.enumeration;
13 
14 public class multicastsniffer {
15 
16     public static void main(string[] args) throws ioexception {
17         //networkinterface interf = networkinterface.getbyinetaddress(inetaddress.getlocalhost());
18         networkinterface interf = networkinterface.getbyinetaddress(inetaddress.getbyname("192.168.1.181"));
19         //设置本地硬件端口;
20         
21         inetsocketaddress group = new inetsocketaddress(inetaddress.getbyname("224.0.0.1"), 2000);
22         //设置组播地址
23         datagramchannel channel = datagramchannel.open(standardprotocolfamily.inet)
24                 .setoption(standardsocketoptions.so_reuseaddr, true)
25                 .setoption(standardsocketoptions.ip_multicast_loop, false)
26                 .bind(group)
27                 .setoption(standardsocketoptions.ip_multicast_if, interf);
28         
29         channel.configureblocking(true);
30         
31         try(multicastchannel multicast = channel){
32             multicast.join(group.getaddress(), interf);
33             
34             byte[] data = new byte[8192];
35             bytebuffer buffer = bytebuffer.allocate(8192);
36             writablebytechannel out = channels.newchannel(system.out);
37             while((((datagramchannel)multicast).receive(buffer))!= null) {
38                 buffer.flip();
39                 out.write(buffer);
40                 buffer.clear();
41             }
42             
43         }catch(ioexception e) {
44             e.printstacktrace();
45         }
46         
47     }
48 
49 }

发送者

 1 import java.io.ioexception;
 2 import java.net.inetaddress;
 3 import java.net.inetsocketaddress;
 4 import java.net.networkinterface;
 5 import java.net.standardprotocolfamily;
 6 import java.net.standardsocketoptions;
 7 import java.nio.bytebuffer;
 8 import java.nio.channels.datagramchannel;
 9 import java.nio.channels.multicastchannel;
10 
11 public class multicastsender {
12 
13     public static void main(string[] args) throws ioexception {
14         
15        // networkinterface interf = networkinterface.getbyinetaddress(inetaddress.getlocalhost());
16         
17         networkinterface interf = networkinterface.getbyinetaddress(inetaddress.getbyname("192.168.1.181"));
18         //设置本地硬件端口;
19         
20         inetsocketaddress group = new inetsocketaddress(inetaddress.getbyname("224.0.0.1"), 2000);
21         //设置组播地址
22         datagramchannel channel = datagramchannel.open(standardprotocolfamily.inet)
23                 .setoption(standardsocketoptions.so_reuseaddr, true)
24                 .bind(group)
25                 .setoption(standardsocketoptions.ip_multicast_if, interf);
26         
27         //.setoption(standardsocketoptions.ip_multicast_loop, false)
28         channel.configureblocking(true);
29         
30         try(multicastchannel multicast = channel){
31             multicast.join(group.getaddress(), interf);
32             
33             bytebuffer buffer = bytebuffer.allocate(8192);
34             buffer.put((inetaddress.getlocalhost().tostring()+'\n').getbytes());
35             for(int i=0; i<3; i++) {
36                 buffer.flip();
37                 ((datagramchannel)multicast).send(buffer, group);
38             }
39             
40         }catch(ioexception e) {
41             e.printstacktrace();
42         }
43 
44     }
45 
46 }

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网