码迷,mamicode.com
首页 > 编程语言 > 详细

组播 java编程

时间:2015-01-26 22:27:46      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

原文地址:http://blog.sina.com.cn/s/blog_49843aeb0100i0bc.html
组播

作用:主机间通信使用、路由间通信使用
概念IP组播技术,是一种允许一台或多台主机(组播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术,是一点对多点的通信
为什么用它:在网络多媒体广播的应用中,当需要将一个节点的信号传送到多个节点时,无论是采用重复点对点通信方式,还是采用广播方式,都会严重浪费网络带宽,只有组播才是最好的选择。组播能使一个或多个组播源只把数据包发送给特定的组播组,而只有加入该组播组的主机才能接收到数据包。
IP组播地址P组播通信依赖于IP组播地址,在IPv4中它是一个D类IP地址,范围从224.0.0.0到239.255.255.255,并被划分为局部链接组播地址、预留组播地址和管理权限组播地址三类。其中,局部链接组播地址范围在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组播地址接收组播数据包的所有主机构成了一个主机组,也称为组播组。一个组播组的成员是随时变动的,一台主机可以随时加入或离开组播组,组播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个组播组。此外,不属于某一个组播组的主机也可以向该组播组发送数据包。
 
Java Example
Server端:
public class Server {  
 
    public static String GROUP_IP = "239.1.1.1";  
    public static int LISTEN_PORT = 22345;  
  
    public static void run() throws UnknownHostException, IOException {  
        System.out.println("server start.......");  
        MulticastSocket multicastSocket = new MulticastSocket(LISTEN_PORT);
        InetAddress group = InetAddress.getByName(GROUP_IP);
        multicastSocket.joinGroup(group);
        byte[] data = new byte[50];   //未填满空间会被0填充,如果数据长度超出数组则超出的数据被忽略 
        DatagramPacket packet = new DatagramPacket(data, data.length);  
        while (true) {  
            try {  
                multicastSocket.receive(packet);  
                System.out.println(new String(data)+packet.getAddress()+" "+
                 new SimpleDateFormat("yy-mm-dd - HH:mm:ss").format(new Date()));  
            } catch (IOException ex) {  
                JOptionPane.showMessageDialog(null, "multicast error");  
                System.exit(1);  
            }  
        }  
    }  
    
    public static void main(String[] args){
     try{
     Server.run();
     }catch(Exception e){
     e.printStackTrace();
     }
    }
    
}

 

Client端:
public class Client {  
 
    public static void run() throws IOException, InterruptedException {  
        System.out.println("client start.......");  
        String name = "ClientID:5";
        MulticastSocket multicastSocket = new MulticastSocket();//其实这里使用DatagramSocket发送packet就行  
        InetAddress group = InetAddress.getByName(Server.GROUP_IP);  
        String msg = "数据 become"+name;
        byte[] data = msg.getBytes();  
        DatagramPacket packet = new DatagramPacket(data, data.length, group, Server.LISTEN_PORT);
        int count =1;
        while (true) {  
            try {  
                multicastSocket.send(packet);  
                System.out.println("send ok ["+name+"]-->"+ count );  
                count++;
                Thread.sleep(10000);  
            } catch (IOException ex) {  
                JOptionPane.showMessageDialog(null, "multicast error");  
                System.exit(1);  
            }  
        }  
    }  
    public static void main(String[] args){
     try{
     Client.run();
     }catch(Exception e){
     e.printStackTrace();
     }
    }
}

 

server端可以随时加入也可以随时退出!
client端发送的消息可以让所有加入的server都能收到!

组播 java编程

标签:

原文地址:http://www.cnblogs.com/tanhao/p/4251378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!