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()+‘\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 }

原文地址:https://www.cnblogs.com/WALLACE-S-BOOK/p/9734462.html

时间: 2024-10-18 20:07:36

IP组播 MulticastChannel接口 DatagramChannel实现的相关文章

如何在AnyChat中使用IP组播接口

AnyChat Platform Core SDK V4.0新增了对IP组播技术的支持,下面介绍如何使用相关的API接口,典型的加入多播组,并向多播组发送数据的代码如下: 1.// 设置本地组播策略 2.DWORD dwMultiCastPolitic = 1; 3.BRAC_SetSDKOption(BRAC_SO_NETWORK_MULTICASTPOLITIC,(const char*)&dwMultiCastPolitic,sizeof(DWORD)); 4.  5.// 加入多播组 6

IP组播技术介绍及实现例子

引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布.多媒体远程教育.CSCW协同计算.远程会诊.这就带来了带宽的急剧消耗和网络拥挤问 题.为了缓解网络瓶颈,人们提出各种方案,归纳起来,主要包括以下四种: ●增加互连带宽: ●服务器的分散与集群,以改变网络流量结构,减轻主干网的瓶颈: ●应用QoS机制,把带宽分配给一部分应用: ●采用IP Multic

音视频二次开发 IP组播技术

在Internet上,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分.点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源.在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定的多个接收者发送消息的方法.1989年,IETF通过RFC1112,定义了Internet上的组播方式. 主机组的成员可以动态变化,主机有权选

音视频SDK开发 IP组播技术

在Internet上,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分.点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源.如图 1.1所示.虽然IP广播允许一个主机把一个IP报文发送给同一个网络的所有主机,但是由于不是所有的主机都需要这些报文,因而浪费了网络资源.在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定

【知识强化】第四章 网络层 4.7 IP组播

这节课我们来学习一下IP组播. 首先我们来看这样一个问题,IP数据报在网络当中传输的时候,有几种传输方式呢?三种,分别是单播.广播和组播(多播).这个组播呢也叫做多播,它们俩是一个意思.那这个组播是由于在很多年前,我们之前是译成了这个组播.现在通常用的都是多播这个词,那么我们现在分别来看一下三种传输方式. 首先对于单播来说呢,单播它指的是发送这个数据报,或者说IP数据报,到单个目的地.而且每发送一份单播报文呢都要使用一个单播的IP地址作为目的地址.那这个单播IP地址呢,其实就是我们之前所讲的A.

H3C组播系列之IP组播概述

一.组播的基本介绍 组播指发送源将产生的单一IP数据包通过网络发送给一组特定接收者的网络传输方式.组播结合了单播和广播的优点,在进行点到多点传输时,发送源不需要关心接受者的数目,仅需要发送一份报文:路由器仅关心接口下是否有接收者,同样不需要关心接收者的数量,所以在路由器之间的链路上也仅传送一份报告. 和单播相比,组播减轻了发送源的负担,并且提高了链路的有效利用率.此外,发送源可以同时发送报文给多个接收者,可以满足低延时应用的需求. 和广播相比,组播方式下路由器仅在有接收者的接口复制报文,报文最终

IP组播基础

单播方式所存在的问题 1.重复流量过多 2.消耗设备和链路带宽资源 3.难以保证传输质量 广播方式存在的问题: 1.地域范围限制 2.安全性无法保障 3.有偿性无法保证 广播方式下,信息发送者与用户主机被限制在一个共享网段中,且该网段所有用户主机都能收到该信息 组播: 优势: 1.无重复流量 2.节省设备与带宽资源 3.安全性高 4.有偿性很高 ASM:任意源组播 发送者是任意的,如果加入了某个组播组,就会收到所有的发给该组的组播数据,他并不知道发送者的位置 SSM:指定源组播 接受者可以指定收

Android MulticastSocket IP组播

MulticastSocket是对等的关系,也就是他们通过IP多点组播保留的地址来相互接收在这个组的Socket发送的消息 我写了一个例子,MultiSocketB是一个service,用于先接收再发送,MultiSocketA用于先发送再接收,完成这一动作后退出 记得要加使用网络的权限 <uses-permission android:name="android.permission.INTERNET" /> 先看MultiSocketA <?xml version

《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)

我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(multicast)和广播(broadcast).IPv4 可以使用所有地址,IPv6 可以使用除广播之外的地址. 本章讨论广播和组播的细节,例如: 链路层如何有效地从一台计算机向其他计算机发送广播或组播流量. 互联网组管理协议(IGMP)和组播侦听协议(MLD)如何工作,通知组播路由器子网中哪些组播