`

java网络通信-组播

 
阅读更多
   在信息时代,网络技术应用已经很普通。其中很多应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分发的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力。一种能最大限度地利用现有带宽的重要技术是IP组播。

1.IP组播技术的概念

IP组播技术,是一种允许一台或多台主机(组播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术,是一点对多点的通信。在网络多媒体广播的应用中,当需要将一个节点的信号传送到多个节点时,无论是采用重复点对点通信方式,还是采用广播方式,都会严重浪费网络带宽,只有组播才是最好的选择。组播能使一个或多个组播源只把数据包发送给特定的组播组,而只有加入该组播组的主机才能接收到数据包。
2.IP组播地址

IP组播通信依赖于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,可限制组播范围。

3.组播组

使用同一个IP组播地址接收组播数据包的所有主机构成了一个主机组,也称为组播组。一个组播组的成员是随时变动的,一台主机可以随时加入或离开组播组,组播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个组播组。此外,不属于某一个组播组的主机也可以向该组播组发送数据包。



    组播消息可以跨网段传播吗?
    组播是可以跨网段的,只要路由器支持.跨网段组播必须打开三层交换机的组播路由协议,一般是PIM 稀疏模式,
    一般三层交换机的默认配置是没有打开组播路由的。


    编辑一个java组播应用程序的过程如下

1. 创建一个用于发送和接收的MulticastSocket组播套接字对象
2. 创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
3. 使用组播套接字joinGroup(),将其加入到一个组播
4. 使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包.
   或者
   使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
5. 解码组播数据包提取信息,并依据得到的信息作出响应String s = new String(dp.getData(), 0, dp.getLength());
6. 重复过程4和5,即在while循环中实现。
7. 使用组播套接字的leaveGroup()方法,离开组播组;关闭组播套接字

接收组播数据包程序:

   
     package com.multicast.test;

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

public class MulticastReceived {

    public static void main(String[] args) throws Exception {
        InetAddress group = InetAddress.getByName("224.0.0.1"); // 组播地址
        int port = 4000; // 端口
        MulticastSocket msr = null;
        try {
            msr = new MulticastSocket(port); // 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
            msr.joinGroup(group); // 3.使用组播套接字joinGroup(),将其加入到一个组播
            byte[] buffer = new byte[8192];
            System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")");
            while (true) {
                DatagramPacket dp = new DatagramPacket(buffer, buffer.length); // 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
                msr.receive(dp); // 4.使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
                String s = new String(dp.getData(), 0, dp.getLength()); // 5.解码组播数据包提取信息,并依据得到的信息作出响应
                System.out.println(s);
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (msr != null) {
                try {
                    msr.leaveGroup(group); // 7.使用组播套接字的leaveGroup()方法,离开组播组
                    msr.close(); // 关闭组播套接字
                } catch (IOException e) {
                }
            }
        }
    }
}



    





    发送组播数据包程序:
   
    package com.multicast.test;

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

public class MulticastSender {

    public static void main(String[] args) throws Exception {
        InetAddress group = InetAddress.getByName("224.0.0.1"); // 组播地址
        int port = 4000; // 端口
        MulticastSocket mss = null;
        try {
            mss = new MulticastSocket(port); // 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
            mss.joinGroup(group); // 3.使用组播套接字joinGroup(),将其加入到一个组播
            System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")");
            while (true) {
                String message = "Hello world!" + new java.util.Date();
                byte[] buffer = message.getBytes(); // 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象

                DatagramPacket dp = new DatagramPacket(buffer, buffer.length, group, port);

                mss.send(dp); // 4.使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包
                // String s = new String(dp.getData(), 0, dp.getLength()); //5.解码组播数据包提取信息,并依据得到的信息作出响应
                System.out.println("发送数据包给" + group + ":" + port);
                Thread.sleep(1000);
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (mss != null) {
                try {
                    mss.leaveGroup(group); // 7.使用组播套接字的leaveGroup()方法,离开组播组
                    mss.close(); // 关闭组播套接字
                } catch (IOException e) {
                }
            }
        }
    }
}
    


  
分享到:
评论

相关推荐

    java网络通信,UDP组播数据收发类及应用示例,可以指定组播收发数据的网卡即组播数据所在网络

    通常在主机多网卡的情况下,需要指定组播数据收发的网卡,即向那个网络发送组播数据,从那个网络接收组播数据,否则容易产生接收不到组播数据的情况。代码中给出的组播收发类直接调用即可,收发类可分开使用,通过...

    java-multicast-instance.rar_java multicast_组播 Java

    总之,Java的组播功能为网络应用程序提供了高效的多点传输能力,尤其适用于需要向多个客户端同时推送数据的场景。通过`MulticastSocket`类和相关的API,开发者可以轻松地实现这一功能。"java-multicast-instance.rar...

    java实现的组播聊天室

    组播的概念是网络通信中的一个重要机制,它允许多个接收者同时接收相同的数据流,极大地提高了效率。在IP网络中,组播地址通常是一个D类IP地址(范围从224.0.0.0到239.255.255.255)。当一个发送者向组播地址发送...

    基于Java的源码-多播通讯框架 JGroups.zip

    多播通信是一种网络通信方式,允许一个消息同时被多个接收者接收,非常适合在分布式系统中进行高效的消息传递。 描述"基于Java的源码-多播通讯框架 JGroups.zip"进一步确认,这个框架是开源的,提供源代码供学习和...

    基于Java的实例源码-组播组中发送和接受数据实例.zip

    在Java编程语言中,组播通信是一种网络通信技术,它允许一台或多台计算机(称为组播组成员)接收同一份数据传输。这种技术在需要高效地向多个接收者广播数据的场景下非常有用,比如在线视频流、实时股市数据或者多...

    java开发的组播聊天室

    总的来说,"java开发的组播聊天室"项目是一个综合性的Java网络编程实践,它涵盖了网络通信、多线程、数据结构等多个方面,对于提升Java开发者的技术能力具有很高的价值。通过学习和实现这样的项目,开发者不仅可以...

    用Java实现IP组播

    在IT行业中,网络通信是至关重要的一个领域,而IP组播是一种有效的网络通信技术,尤其在需要向多个接收者同时发送相同数据的场景下。Java提供了丰富的API来支持IP组播,使得开发者能够轻松地构建组播应用。本文将...

    Java聊天室,组播+私聊

    Java聊天室是一个基于...综上所述,这个Java聊天室项目涵盖了Java网络编程的基础,如Socket通信、组播技术、文件I/O以及可能的并发处理和安全性设计。对于学习和理解Java网络应用开发来说,这是一个非常有价值的实例。

    Java组播代码

    Java组播技术是一种网络通信方式,它允许一台或多台设备(称为组播组成员)接收来自单个数据源的相同数据流。这种技术在需要高效地向多个接收者广播信息的场景中非常有用,比如在线视频流、实时股票报价或者分布式...

    基于Java网络编程中组播技术的应用研究.pdf

    组播技术是一种网络数据传输方式,它能够让单一数据源向多个目的地发送...实验的成功说明Java在实现组播通信方面不仅可行,而且效率较高,这进一步表明Java网络编程在处理复杂的网络通信任务时具有很好的应用前景。

    java多组播中传递对象

    Java多组播是一种在网络通信中高效广播数据的技术,它允许数据包被同时发送到多个接收者,而无需为每个接收者单独发送。在本场景中,我们关注的是如何使用Java来实现在多组播中传递对象。这通常涉及到网络编程、序列...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    基于Java网络编程中组播技术的应用与研究.pdf

    Java网络编程中的组播技术主要利用了IP多播地址,其数据传输过程涉及特定的组播组,只有加入该组播组的主机能够接收数据包。 二、基于Java的组播Socket网络编程 在Java中实现组播技术,主要是通过MulticastSocket...

    java udp 组播

    1. **Java MulticastSocket类**:Java提供了`java.net.MulticastSocket`类来处理组播通信。创建MulticastSocket对象后,我们可以加入特定的组播组,这个组是由特定的IP组播地址定义的。 ```java MulticastSocket ...

    jpush-api-java-client-3.3.0.zip

    总的来说,`jpush-api-java-client-3.3.0.zip`提供的Java客户端SDK让开发者能够方便地在服务端集成极光推送功能,实现与移动设备的实时通信,提升用户体验并优化应用运营。通过学习和掌握这个SDK的使用,开发者可以...

    用JAVA进行TCP-IP-UDP多播网络应用程序编制(英文版).pdf

    本文将深入探讨如何使用Java来实现TCP/IP通信,并简要提及UDP多播的概念。TCP(传输控制协议)和IP(互联网协议)是互联网通信的基石,而Java提供了一套强大的API来支持这两种协议的网络编程。 首先,TCP是一种面向...

    java的组播聊天室——图形界面

    【Java的组播聊天室——图形界面】是一个利用Java编程语言构建的多用户通信系统,它基于多播技术实现,允许多个用户在同一网络环境中实时交流。这个项目的核心特性是其图形用户界面(GUI),提供了直观易用的交互...

    mcast.rar_Java 组播_Multicast java_mcast_mcast组播_multicast in java

    总的来说,Java组播提供了一种有效、高效的网络通信机制,通过`MulticastSocket`类,开发者可以轻松实现多点广播的应用。在给定的源码中,我们能看到如何建立组播发送者和接收者的实例,以及它们如何交互和处理数据...

    Java 组播组中发送和接受数据实例.rar

    Java 组播组是网络编程中的一个重要概念,它允许数据包在多个接收者之间广播,而无需逐个发送。在Java中,我们可以使用Java的多播套接字(MulticastSocket)来实现这一功能。本实例将深入讲解如何在Java中创建组播组...

    笨笨熊聊天室--一个组播通信的实例源代码

    组播通信是一种网络通信模式,它允许数据发送者将信息一次性发送到多个接收者,而无需为每个接收者单独发送。在UDP(用户数据报协议)基础上的组播,通过特定的IP组播地址来实现,这大大优化了大规模分布式系统中的...

Global site tag (gtag.js) - Google Analytics