多播(组播)与广播的技术实现

1、组播是基于路由器之上实现的,要想网络内支持组播,需要有能够管理组播组的路由器或是三层交换机(带部分路由功能的交换机)。通常在我们的网络中,都会支持组播,即我们的程序可以使用组播技术,视频会议就使用这个技术。

2、IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。通常选择230之后的地址,使用UDP协议,把每个客户端(收端和发端)的socket都加入到这个地址上,之后客户端往这个地址上发送一个消息后,在这个组里的其他客户端都可以监听收到这个消息。

3、在java中,java.net.MulticastSocket具有组播的功能,它是DatagramSocket的子类。具体程序如下:


package com.udpdemo.multicast;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.InetAddress;

import java.net.MulticastSocket;

import java.text.SimpleDateFormat;

import java.util.Date;

public class ServerMulticastSocketTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MulticastSocket multicastSocket;
        try {
            multicastSocket = new MulticastSocket();
            InetAddress address = InetAddress.getByName("239.0.0.1"); // 必须使用D类地址
            multicastSocket.joinGroup(address); // 以D类地址为标识,加入同一个组才能实现广播

            while (true) {
                String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
                byte[] buf = time.getBytes();
                DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
                datagramPacket.setAddress(address); // 接收地址和group的标识相同
                datagramPacket.setPort(10000); // 发送至的端口号

                multicastSocket.send(datagramPacket);
                Thread.sleep(1000);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
package com.udpdemo.multicast;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ClientMulticastSocketTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MulticastSocket multicastSocket;
        try {
            multicastSocket = new MulticastSocket(10000);
             InetAddress address = InetAddress.getByName("239.0.0.1");
                multicastSocket.joinGroup(address);
                byte[] buf = new byte[1024];

                while (true) {
                    DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
                    multicastSocket.receive(datagramPacket); // 接收数据,同样会进入阻塞状态

                    byte[] message = new byte[datagramPacket.getLength()]; // 从buffer中截取收到的数据
                    System.arraycopy(buf, 0, message, 0, datagramPacket.getLength());
                    System.out.println(datagramPacket.getAddress());
                    System.out.println(new String(message));
                }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // 接收数据时需要指定监听的端口号

    }

}

4、广播功能:

使用255.255.255.255(或者是192.168.10.255,具体ip地址上设置第四个参数为255是本网段的广播地址)的IP地址,所有的客户端都监听这个地址,发这个地址上发送消息,其他的客户端都会接收到。

  java中使用java.net.DatagramSocket来完成监听和发送,发送信息前,要开启广播,即调用socket的setbroadcast(true)。

 

发送端Socket:void init_uSock(String sendText) throws Exception{
        uSock = new DatagramSocket();
        InetAddress host = InetAddress.getByName("192.168.10.255");
        byte[] data = sendText.getBytes();
        DatagramPacket packet = new DatagramPacket(data, data.length, host, office.local_udp_port);
        uSock.setBroadcast(true);
        uSock.send(packet);
        Log.e("UDP", "发送");
    }
接收端Socket:InetAddress addr = InetAddress.getByName("192.168.10.255");
DatagramSocket uServ = new DatagramSocket(office.local_udp_port,addr);
while (uWork) {
       DatagramPacket packet = new DatagramPacket(new byte[102400], 102400);

       uServ.receive(packet);
       .............
}

  

时间: 2024-07-30 16:12:01

多播(组播)与广播的技术实现的相关文章

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单播.组播.广播实例, 这些代

「ZigBee模块」网络通讯实验-点播、组播、广播

预告下,明天还有最后一个实验<zigbee协议栈管理>......太棒了~马上就如期完成任务啦!哈哈哈 点播.组播.广播 一.基础知识补充 Zigbee的通信方式主要有三种:点播.组播.广播. 点播就是点对点通信,也就是两个设备之间的通信,不允许第三个设备收到信息. 组播就是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到. 广播,最广泛的就是1个设备上发出的信息所以设备都能接收到. 二.点播实验步骤 因为要将收到的数据通过串口显示在屏幕上,所以在程序开始之前先把串口初始化吧

组播和广播的概念,IGMP的用途

1.组播和广播的概念 1) 组播 主机之间的通讯模式,也就是加入了同一个组的主机可以接收到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据. 主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机. 这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯. 2) 广播 是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包.广播意味着网络向子网每

单播、组播、广播

广播 1.Broadcast(广播):主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉. 有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面. 在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机. 2.广播方式下,Source把信息传送给该网段中

多播/组播

多播数据同时传递到加入特定组的大量主机 多播地址D类地址:224.0.0.0~239.255.255.255 数据的发送者和接收者发送者:只要往多播组地址发送数据接收者:需要加入到多播组通过如下代码加入多播组: /* struct ip_mreq { /* 多播组地址 */ struct in_addr imr_multiaddr; /* 加入多播组的主机地址 */ struct in_addr imr_interface; }; */struct ip_mreq join_addr;join_

IP多播(组播)

IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希仁)第五版中单播与多播示意图. 因特网上的多播成为IP多播. 多播组 实现多播,必定就须要有多播组.多播组须要有自己的标识符.而多播组IP即为多播组的标识符,一个多播组IP代表一个多播组. D类IP地址即为多播组IP地址.D类地址前四位为1110,范围是 224.0 .0 .0到 239. 255. 255.

图说单播,组播,广播,选播和地域播

在计算机网络之路由选择中,单播(unicast),组播(multicast)和广播(broadcast)可谓家喻户晓,妇孺皆知.但其实播(cast)有5种,列举如下: Routing schemes differ in how they deliver messages: 1 unicast delivers a message to a single specific node. 2 multicast delivers a message to a group of nodes that h

单播、多播(组播)和广播的区别

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

单播、多播(组播)和广播的差别

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

单播、多播(组播)和广播的区别,搞通信选整明白这三个东东

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