[转]java 组播

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

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

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

首先是接收端

[java]view plaincopyprint?

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

然后是发送端

[java]view plaincopyprint?

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

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