`
158067568
  • 浏览: 329034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UDP广播与多播简单实现

阅读更多

UDP广播与多播

作者:legend

QQ158067568

使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。

通常我们讨论的udp的程序都是一对一的单播程序。本章将讨论一对多的服务:广播(broadcast)、多播(multicast)。对于广播,网络中的所有主机都会接收一份数据副本。对于多播,消息只是发送到一个多播地址,网络知识将数据分发给哪些表示想要接收发送到该多播地址的数据的主机。总得来说,只有UDP套接字允许广播或多播。

UDP广播

广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。

广播地址通常用于在网络游戏中处于同一本地网络的玩家之间交流状态信息等。广播就不在写演示程序了,读者可以将ECHO程序的ip地址改为广播地址即可。

其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。

UDP多播

同样的UDP多播也要指明接受者的端口号,而且与广播相似的是多播与单播之间的区别还在于地址。ipv4中的多播地址范围是:224.0.0.0239.255.255.255。在JAVA中,多播一样十分好实现,要实现多播,就要用到MulticastSocket类,其实该类就是DatagramSocket的子类,在使用时除了多播自己的一些特性外,把它当做DatagramSocket类使用就可以了。下面将给出一个简单的多播接受数据的例子:

package cn.edu.heut.zcl.multicast;

 

import java.net.DatagramPacket;

import java.net.InetAddress;

import java.net.MulticastSocket;

 

public class UDPMulticastServer {

         final static int RECEIVE_LENGTH = 1024;

         static String multicastHost="224.0.0.1";

         static int localPort = 9998;

         public static void main(String[] args) throws Exception {

                   

                   InetAddress receiveAddress =InetAddress.getByName(multicastHost);

                   if(!receiveAddress.isMulticastAddress()){//测试是否为多播地址

                            throw new Exception("请使用多播地址");

                   }

                   int port = localPort;

                   MulticastSocket receiveMulticast = new MulticastSocket(port);

                   receiveMulticast.joinGroup(receiveAddress);

                   DatagramPacket dp = new DatagramPacket(new byte[RECEIVE_LENGTH], RECEIVE_LENGTH);

                   receiveMulticast.receive(dp);

                   System.out.println(new String(dp.getData()).trim());

                   receiveMulticast.close();

         }

}

 

 

 

 

 

接下来实现多播发送方的代码:

package cn.edu.heut.zcl.multicast;

 

import java.net.DatagramPacket;

import java.net.InetAddress;

import java.net.MulticastSocket;

 

public class UDPMulticastClient {

 

                   static String destAddressStr = "224.0.0.1";

                   static int destPortInt = 9998;

                   static int TTLTime = 4;

         public static void main(String[] args) throws Exception {

                   

                   InetAddress destAddress = InetAddress.getByName(destAddressStr);

                   if(!destAddress.isMulticastAddress()){//检测该地址是否是多播地址

                            throw new Exception("地址不是多播地址");

                   }

                   int destPort = destPortInt;

                   int TTL = TTLTime;

                   MulticastSocket multiSocket =new MulticastSocket();

                   multiSocket.setTimeToLive(TTL);

                   byte[] sendMSG = "11#msg".getBytes();

                   DatagramPacket dp = new DatagramPacket(sendMSG, sendMSG.length, destAddress  , destPort);

                   multiSocket.send(dp);

                   multiSocket.close();

         }

}

 

 

在多播中设置了TTl值(Time to live),每一个ip数据报文中都包含一个TTL,每当有路由器转发该报文时,TTL1,知道减为0时,生命周期结束,报文即时没有到达目的地,也立即宣布死亡。当然在Java中,ttl并不是十分准确的,曾经在一本书中介绍过报文的传播距离是不会超过ttl所设置的值的。

 

 

 

 

 

 

  • src.rar (2.5 KB)
  • 下载次数: 349
5
0
分享到:
评论
2 楼 flyar 2014-08-15  
你好!我按照你的代码实现多点广播,但是在一台机子休眠,另一台手机不休眠,重启wifi后,等待两台手机都连接到wifi,打开休眠那一台手机,两台手机都接受不到广播了,是怎么回事。重新进入app也接受不到
1 楼 joefei 2013-11-04  
看過好多篇關於UDP的廣播和組播介紹的,還是樓主這篇最好,簡潔明瞭,讓我茅塞頓開。

相关推荐

    UDP下的广播、组播(多播)-VC6

    压缩包中的文件名称"UDP组播、多播、UDP广播"可能包含了实现这些功能的不同源代码文件。 总的来说,理解和掌握UDP广播和组播的概念以及如何在VC6环境中实现它们,对于网络编程和多媒体应用的开发者来说至关重要。...

    vb UDP广播示例

    通过设置Socket控件的相关属性和方法,我们可以轻松实现UDP广播功能。 3. **设置Socket控件**: - **Protocol属性**:设置为2表示使用UDP协议。 - **LocalPort属性**:指定本地端口号,用于接收和发送数据。 - *...

    Qt-使用QUdpSocket实现UDP通信的单播、组播、广播

    在IT领域,网络通信是...总的来说,Qt的QUdpSocket类为开发人员提供了简单易用的接口,使得在C++应用中实现UDP通信的单播、组播和广播变得轻而易举。通过理解这些基本概念和操作,你可以构建高效、可靠的UDP通信系统。

    工业领域使用qt开发UDP通信功能的实现(包括单播,广播,组播)

    本软件实现了两台甚至多台电脑之间使用UDP通信的功能,包括单播,广播,组播的功能实现,三种发送方式的切换在代码中已标明。 默认状态为本机发送,本机接受,也就是接收端的ip地址设置为127.0.0.1,用户可根据实际...

    w5500udp组播.rar

    总结来说,W5500配合UDP组播功能,可以实现高效的多点广播通信。开发者需要熟悉W5500的寄存器配置、IGMP协议处理以及套接字编程,才能充分利用这一特性。在实际项目中,结合具体的硬件平台和软件框架,可以开发出...

    windows下UDP组播(多播)发送和接收程序

    UDP组播,也称为多播,是一种网络通信方式,它允许单个数据源向多个接收者同时发送数据,而无需为每个接收者单独建立连接。这种方式在广播和流媒体服务中尤为常见,因为它能有效利用网络带宽并降低服务器负载。在...

    三类udp讲解,udp分为三类,多播和组播的区别

    UDP通信主要分为三种类型:单播、广播和多播。 1. **单播**: - 单播是最常见的通信方式,类似于邮政系统中的点对点邮寄。发送方将数据包发送给一个特定的接收方,每个数据包只被发送一次,且仅由一个接收方接收。...

    51单片机控制w5500实现udp单播通信

    在单播通信中,数据包被发送到特定的单一接收者,与广播和多播不同。 要实现51单片机和W5500的UDP单播通信,我们需要完成以下步骤: 1. **硬件连接**:将51单片机的SPI接口(通常包括SCK、MISO、MOSI和CS)与W5500...

    愤怒_UDP广播

    **二、广播与多播** 广播是网络通信的一种方式,其中一台设备向同一网络中的所有其他设备发送数据包。在IP层,广播地址通常为子网掩码全为1的地址,如255.255.255.255。而多播则允许发送者向一组特定的接收者发送...

    Linux下的udp广播程序

    通过学习和实践这些基本概念,你可以创建更复杂的UDP广播应用程序,例如用于局域网内的设备发现、多播通信或者实时数据传输等场景。在开发过程中,可以利用`netcat`、`tcpdump`等工具进行测试和调试,以确保程序的...

    UDP通讯 WPF 广播 单播

    WPF+C#广播和单播示例 实现功能:添加聊天组 显示聊天组成员 多人聊天和单聊 界面简单,目的在于联系UDP通讯,对于图片的处理还未完成,Demo中的保存数据按钮目前没添加功能,欢迎大家一块研究

    udp组播多播

    ### 实现简单UDP组播多播程序 创建UDP组播多播程序涉及以下步骤: 1. 打开一个UDP套接字并将其绑定到一个本地端口。 2. 设置套接字为多播模式,使用setsockopt()函数设置IP_ADD_MEMBERSHIP选项,加入所需的组播组。 ...

    泥人W5500模块-UDP模式例程.rar_893_W5500UDP组播_w5500_w5500 UDP组播_writersfn

    在本文中,我们将深入探讨如何使用W5500模块在UDP模式下实现与上位机的通信。W5500是一款集成了SPI接口的以太网控制器,广泛应用于嵌入式系统中,提供了全硬件TCP/IP协议栈,使得在微控制器中实现网络通信变得更加...

    MFC的UDP广播实验程序

    **MFC的UDP广播实验程序详解** MFC(Microsoft Foundation Classes)是微软提供的一套用于构建Windows应用程序的C++类库。在这个实验程序中,我们关注的是如何利用MFC实现UDP(User Datagram Protocol)的广播功能...

    QT UDP组播的实现

    在QT中实现UDP(User Datagram Protocol)组播,可以让我们构建能够高效地向多个接收者广播数据的应用程序。UDP是一种无连接的协议,适用于实时数据传输,如音频、视频流等,因为它不需要建立连接和维护连接状态,...

    UDP UDP广播的实现IPv4&IPv6

    实现UDP广播的基本步骤包括: 1. 创建套接字:在C/C++中,使用`socket()`函数创建一个UDP套接字,指定协议族为AF_INET(IPv4)或AF_INET6(IPv6),类型为SOCK_DGRAM(UDP)。 2. 设置广播选项:使用`setsockopt()...

    vc udp通信 socket setsockopt 组播广播

    根据提供的文件信息,本文将详细解释VC环境下使用UDP协议实现组播通信的关键概念和技术细节。 ### 一、组播通信概述 #### 1.1 组播定义 组播(Multicast)是一种允许一个或多个发送者(一个发送者称为源)发送单一...

    UDP Socket组播

    UDP(User Datagram Protocol)是传输...总之,UDP Socket组播是一种高效的数据传输方式,适合需要向多个接收者广播信息的场景。正确配置和使用多播Socket,可以在不增加网络负担的情况下,实现大规模的点对多点通信。

    Qt案例之利用QUdpSocket类实现UDP网络广播通信.zip

    此外,`QUdpSocket`还提供了其他功能,如`joinMulticastGroup()`和`leaveMulticastGroup()`,用于加入和离开多播组,这对于实现多播通信非常有用。但在这个案例中,我们主要关注的是基本的广播通信。 总的来说,这...

Global site tag (gtag.js) - Google Analytics