编程学习资讯网

IP组播 MulticastChannel接口 DatagramChannel实现

发布时间:2018-10-09 10:57:28   来源:本站编辑   浏览次数:

监听者

复制代码
 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 }
复制代码

 

编程学习网 http://www.javalearns.cn

关注微信号:javalearns   随时随地学Java

或扫一扫


随时随地学Java