Java 多播套接字

1578人阅读 评论(1) 收藏 举报
多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。

      1、IP多播地址和多播组

           IP多播通信必须依赖于IP多播地址。在IPv4中它是一个D类IP地址,范围从224.0.0.0到239.255.255.255,地址 224.0.0.0 被保留,不应使用。 并被划分为局部链接多播地址、预留多播地址和管理权限多播地址三类。其中,局部链接多播地址范围在224.0.0.0~224.0.0.255,这是为路由协议和其它用途保留的地址,路由器并不转发属于此范围的IP包;预留多播地址为224.0.1.0~238.255.255.255,可用于全球范围(如 Internet)或网络协议;管理权限多播地址为239.0.0.0~239.255.255.255,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

 

      使用同一个IP多播地址接收多播数据包的所有主机构成了一个主机组,也称为多播组。一个多播组的成员是随时变动的,一台主机可以随时加入或离开多播组,多播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个多播组。此外,不属于某一个多播组的主机也可以向该多播组发送数据包。


      2、加入或退出多播组

           可以通过使用所需端口创建 MulticastSocket,然后调用 joinGroup(InetAddress groupAddr) 方法来加入多播组。

      套接字通过 leaveGroup(InetAddress addr) 方法放弃组中的成员资格。

 

      3、发送或接收数据包

           当套接字预定多播组/端口时,像所有其他成员一样(组和端口相同),它将接收其他成员发送的数据报。
           将消息发送到多播组时,该主机和端口的所有预定接收者都将接收到消息(在数据包的生存范围内)。套接字不必成为多播组的成员即可向其发送消息。


      4、多个 MulticastSocket 可以同时预定多播组和端口,并且都会接收到组数据包。

 

      5、不允许 applet 使用多播套接字。

// join a Multicast group and send the group salutations
String msg = "Hello";
InetAddress group = InetAddress.getByName("228.5.6.7");
MulticastSocket s = new MulticastSocket(6789);
s.joinGroup(group);
DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789);
s.send(hi);
// get their responses!
byte[] buf = new byte[1000];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
s.receive(recv);
...
// OK, I'm done talking - leave the group...
s.leaveGroup(group);


参考文章:

http://blog.csdn.net/daviyang35/archive/2007/05/14/1608013.aspx


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:249855次
    • 积分:2544
    • 等级:
    • 排名:第14451名
    • 原创:40篇
    • 转载:42篇
    • 译文:0篇
    • 评论:84条
    我的微信公众号
    长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
    文章分类
    最新评论