HarrySun

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1. 组播知识介绍: http://blog.csdn.net/happy_david/article/details/1569209

 

2. java 组播实现:来自: http://blog.csdn.net/a352193394/article/details/7395600

下面来演示一下使用Java Socket的组播类实现一个组播的小案例

首先是接收端

 

  1. package com.bird.test;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.InetAddress;  
  5. import java.net.MulticastSocket;  
  6. import java.util.Date;  
  7.   
  8. /** 
  9.  * 组播的客户端 
  10.  * @author Bird 
  11.  * 
  12.  */  
  13. public class MulticastReceive {  
  14.   
  15.       
  16.     public static void main(String[] args) throws Exception {  
  17.         test();  
  18.     }  
  19.       
  20.     public static void test() throws Exception{  
  21.         InetAddress group = InetAddress.getByName("224.0.0.2");//组播地址  
  22.         int port = 8888;  
  23.         MulticastSocket msr = null;//创建组播套接字  
  24.         try {  
  25.             msr = new MulticastSocket(port);  
  26.             msr.joinGroup(group);//加入连接  
  27.             byte[] buffer = new byte[8192];  
  28.             System.out.println("接收数据包启动!(启动时间: "+new Date()+")");  
  29.             while(true){  
  30.                 //建立一个指定缓冲区大小的数据包  
  31.                 DatagramPacket dp = new DatagramPacket(buffer, buffer.length);  
  32.                 msr.receive(dp);  
  33.                 String s = new String(dp.getData(),0,dp.getLength());  
  34.                 //解码组播数据包  
  35.                 System.out.println(s);  
  36.             }  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }finally{  
  40.             if(msr!=null){  
  41.                 try {  
  42.                     msr.leaveGroup(group);  
  43.                     msr.close();  
  44.                 } catch (Exception e2) {  
  45.                     // TODO: handle exception  
  46.                 }  
  47.             }  
  48.         }  
  49.     }  
  50.       
  51.   
  52. }  


然后是发送端

 

 

  1. package com.bird.test;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.InetAddress;  
  5. import java.net.MulticastSocket;  
  6. import java.util.Date;  
  7.   
  8. /** 
  9.  * 组播的服务端 
  10.  * @author Bird 
  11.  * 
  12.  */  
  13. public class MulticastSender {  
  14.       
  15.     public static void server() throws Exception{  
  16.         InetAddress group = InetAddress.getByName("224.0.0.2");//组播地址  
  17.         int port = 8888;  
  18.         MulticastSocket mss = null;  
  19.         try {  
  20.             mss = new MulticastSocket(port);  
  21.             mss.joinGroup(group);  
  22.             System.out.println("发送数据包启动!(启动时间"+new Date()+")");  
  23.               
  24.             while(true){  
  25.                 String message = "Hello "+new Date();  
  26.                 byte[] buffer = message.getBytes();  
  27.                 DatagramPacket dp = new DatagramPacket(buffer, buffer.length,group,port);  
  28.                 mss.send(dp);  
  29.                 System.out.println("发送数据包给 "+group+":"+port);  
  30.                 Thread.sleep(1000);  
  31.             }  
  32.         } catch (Exception e) {  
  33.             e.printStackTrace();  
  34.         }finally{  
  35.             try {  
  36.                 if(mss!=null){  
  37.                     mss.leaveGroup(group);  
  38.                     mss.close();  
  39.                 }  
  40.             } catch (Exception e2) {  
  41.                 // TODO: handle exception  
  42.             }  
  43.         }  
  44.     }  
  45.       
  46.     public static void main(String[] args) throws Exception {  
  47.         server();  
  48.     }  
  49. }  


通过开启多个接收端,然后开启发送端,就可以实现组播的效果

posted on 2013-10-18 21:57  HarrySun  阅读(2030)  评论(0编辑  收藏  举报