Java多播套接字

来源:互联网 发布:工程三维绘图软件 编辑:程序博客网 时间:2024/04/30 11:45
多播数据报套接字类用于发送和接收 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 使用多播套接字。


  1. // join a Multicast group and send the group salutations  
  2. String msg = "Hello";  
  3. InetAddress group = InetAddress.getByName("228.5.6.7");  
  4. MulticastSocket s = new MulticastSocket(6789);  
  5. s.joinGroup(group);  
  6. DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789);  
  7. s.send(hi);  
  8. // get their responses!  
  9. byte[] buf = new byte[1000];  
  10. DatagramPacket recv = new DatagramPacket(buf, buf.length);  
  11. s.receive(recv);  
  12. ...  
  13. // OK, I'm done talking - leave the group...  
  14. s.leaveGroup(group);

原创粉丝点击