zoukankan      html  css  js  c++  java
  • [转]java 组播

    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. }  


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

  • 相关阅读:
    opencv出现问题:/usr/lib/x86_64-linux-gnu/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    SCI-HUB 解锁论文的正确姿势——如何免费下载论文
    VS2019 实现与 Linux服务器同步
    VS Code 写代码实时同步服务器【Sftp插件】
    Docker实用技巧(二):容器与主机之间复制文件
    Docker实用技巧(一):镜像的备份/保存/加载/删除
    mycat注解及高可用(三)
    mycat分片及主从(二)
    SVN中trunk,branches,tags用法详解
    寄存器的英文全称
  • 原文地址:https://www.cnblogs.com/harrysun/p/3376869.html
Copyright © 2011-2022 走看看