组播 java编程

原文地址: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都能收到!

时间: 2024-08-20 10:24:30

组播 java编程的相关文章

Python3组播通信编程实现教程(发送者+接收者)

一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 广播指发送者发送之后,IP数据包被路由器发给与其连接的所有设备的通信形式 组播指发送者发送之后,IP数据包被路由器发往目的IP对应组播组名下所有主机的通信形式 1.2 个人理解组播解释 对于标准的组播解释,说明似乎还算是清楚的,但具体到技术就有很多问题.比如我将数据包发往一个组播地址,这个组播地址对

网络通信:单播、广播、组播

本文目录: 一.网络通信的分类.他们的定义和特点. 二.单播.广播.组播的传输信息的网络拓扑模型. 三.单播.广播.组播的编程实例. 一.网络通信的分类.他们的定义和特点. 二.单播.广播.组播的传输信息的网络拓扑模型. (一)单播 如图8-1 所示,网络中存在信息发送者Source,UserA 和UserC 提出信息需求,网络采用单播方式传输信息.                                                  单播传输特点归纳如下: * Source 向每个

组播原理

原文地址:http://linux.chinaitlab.com/administer/5573.html 摘要: 本文可做为TCP/IP组播技术的入门材料,文中介绍了组播通 信的概念及原理,以及用于组播应用编程的Linux API的详细资料.为了使读者更加完整的了解Linux 组播的整体概念,文中对实现该技术的核心函数也做了介绍.在文章的最后给出了一个简单的C语言套接字编程例子,说明如何创建组播应用程序. 一.导言 在网络中,主机间可以用三种不同的地址进行通信: 单播地址(unicast):即

java组播MulticastSocket

在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的.所以在编程模式上用同一个类表示即可--MulticastSocket. MulticastSocket属于jdk提供的类,类路径为java.net.MulticastSocket,利用此类可以很方便地实现组播功能,下面展示一个简单例子,两个节点之间通过组播传输消息. ①节点一,指定组播地址为228.0.0.4,

netty的Udp单播、组播、广播实例+Java的Udp单播、组播、广播实例

网络上缺乏netty的udp的单播.组播案例,经过一番学习总结之后终于把这两个案例调通,下面把这两个案例的代码放在这里分享一下. 首先推荐博文: http://colobu.com/2014/10/21/udp-and-unicast-multicast-broadcast-anycast/#Netty%E4%B8%8E%E5%8D%95%E6%92%AD%EF%BC%8C%E7%BB%84%E6%92%AD netty的Udp单播.组播.广播实例+Java的Udp单播.组播.广播实例, 这些代

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

JAVA实现UDP组播聊天程序

分类: Java 一.实验环境 编程语言:Java1.5(运行在JVM(Java Virsual Machine)) 开发工具:eclipce3.2 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: /** * 该程序实现了

JAVA 单播、多播(组播)、广播

单播"(Unicast)."多播"(Multicast)和"广播"(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语.那么这些术语究竟是什么意思?区别何在? 1. 单播:网络节点之间的通信就好像是人们之间的对话一样.如果一个人对另外一个人说话,那么用网络技术的术语来描述就是"单播",此时信息的接收和传递只在两个节点之间进行.单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知

Java UDP 多用户 组播 聊天程序

一.实验环境 编程语言:Java1.8(运行在JVM(Java Virsual Machine)) 开发工具:eclipce 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: package cn.gdut.edu.udp;