第13章 IP组播
来源:互联网 发布:sql server 2012使用 编辑:程序博客网 时间:2024/06/05 23:07
第13章 IP组播
Internet组播建立在UDP基础之上。Java中的组播要使用第12章介绍的DatagramPacket,以及一个新的MulticastSocket类。
13.1 组播
组播比单播的点对点通信宽,但比广播通信窄而且目标更明确。组播将数据从一个主机发送给多个不同的主机,但不是发送给每一个人,数据值传送到加入某个特定的组播组,从而表示对此感兴趣的客户端。
组播地址和组
组播地址是称为组播组的一组主机的共享地址。
组播组是一组共享一个组播地址的Internet主机.任何发送给该组播地址的数据都会中继给组中的所有成员。组播组中的成员是开放的,主机可以在任何时候进入或离开组。
客户端和服务器
当一台主机希望向组播发送数据时,它会将数据放在组播数据报中,组播数据报也就是发送到组播组的UDP数据报而已。
组播要考虑TTL值。TTL字段是为了防止路由循环而设计的,以保住所有包最终都会被丢弃。防止配置有误的路由器相互之间无限地来回传递包。
路由器和路由
组播最大的限制在于是否有特殊的组播路由器。组播路由器是重新配置的Internet路由器或工作站,支持IP组播扩展。
13.2 使用组播Socket
在Java中,要使用Java.net.MulticastSocket类来组播数据,这是java.net.DatagramSocket的一个子类:
将数据放在DatagramPakcet对象中,然后通过MulticastSocket收发DatagramPacket对象。
打开一个监听端口2300的MulticastSocket:
MulticastSocket ms = new MulticastSocket(2300);
使用joinGroup()方法加入到一个组播组:
InetAddress group = InetAddress.getByName("224.2.2.2");
ms.joinGroup(group);
一旦加入到组播组,就可以像DatagramSocket一样接受UDP数据。
byte[] buffer = new byte[8192];
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
ms.receive(dp);
不再希望接受数据时,通过调用这个Socket的leaveGroup()方法离开组播组。然后可以用close()方法关闭该Socket:
ms.leaveGroup(group);
ms.close();
不需要加入组播组就可以向组播地址发送数据。可以创建一个新的DatagramPacket,在包中填充数据和组播组的地址,将这个包传入send()方法:
InetAddress ia = InetAddress.getByName("experiment.mcast.net");
byte[] data = "Here's some multicast data\r\n".getBytes("UTF-8");
int port = 4000;
DatagramPacket dp = new DatagramPacket(data,data.length,ia,port);
MulticastSocket ms = new MulticastSocket();
ms.send(dp);
13.3 两个简单示例
0 0
- 第13章 IP组播
- IP多播(组播)
- TCP/IP 第12章 广播与多播
- 【TCP/IP详解】第12章 广播和多播
- IP组播技术
- IP组播技术
- IP组播
- IP组播技术
- IP组播技术
- IP组播介绍
- IP组播
- IP 组播
- IP组播
- IP组播技术
- IP组播
- IP 组播
- 组播IP地址
- IP组播基础知识
- Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xm
- 关于openvas的酸甜苦辣
- 英语
- lintcode之不同子序列数 + 序列II
- java web笔记——Cookie&&Session
- 第13章 IP组播
- Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法
- c++第4次作业
- oracle 11.2.0.3 rac + asm + rhel 6.4 + udev 双节点安装
- 重新学javaweb---JSP乱码 图解
- C++ enum
- 读取手机的联系人
- C++作业4
- scrapy 报错 no module named win32api 的解决方法