zoukankan      html  css  js  c++  java
  • IP组播 MulticastChannel接口 DatagramChannel实现

    监听者

     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()+'
    ').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 }
  • 相关阅读:
    Django admin的一些有用定制
    django后台中如何在result_list内优雅的显示及使用过滤器?
    DataFrame 的函数
    pandas的替换和部分替换(replace)
    HTML5中的Web Notification桌面右下角通知功能的实现
    sqlalchemy 实现select for update
    SQLAlchemy 使用经验 (查询 事务 锁表)
    concat()
    某数据防泄漏 越权修改管理员密码
    齐治堡垒机 远程命令执行漏洞[CNVD-2019-20835]
  • 原文地址:https://www.cnblogs.com/WALLACE-S-BOOK/p/9734462.html
Copyright © 2011-2022 走看看