UDP广播与多播
作者:legend
QQ:158067568
使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。
通常我们讨论的udp的程序都是一对一的单播程序。本章将讨论一对多的服务:广播(broadcast)、多播(multicast)。对于广播,网络中的所有主机都会接收一份数据副本。对于多播,消息只是发送到一个多播地址,网络知识将数据分发给哪些表示想要接收发送到该多播地址的数据的主机。总得来说,只有UDP套接字允许广播或多播。
UDP广播
广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。
广播地址通常用于在网络游戏中处于同一本地网络的玩家之间交流状态信息等。广播就不在写演示程序了,读者可以将ECHO程序的ip地址改为广播地址即可。
其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。
UDP多播
同样的UDP多播也要指明接受者的端口号,而且与广播相似的是多播与单播之间的区别还在于地址。ipv4中的多播地址范围是:224.0.0.0到239.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,每当有路由器转发该报文时,TTL减1,知道减为0时,生命周期结束,报文即时没有到达目的地,也立即宣布死亡。当然在Java中,ttl并不是十分准确的,曾经在一本书中介绍过报文的传播距离是不会超过ttl所设置的值的。
分享到:
相关推荐
压缩包中的文件名称"UDP组播、多播、UDP广播"可能包含了实现这些功能的不同源代码文件。 总的来说,理解和掌握UDP广播和组播的概念以及如何在VC6环境中实现它们,对于网络编程和多媒体应用的开发者来说至关重要。...
通过设置Socket控件的相关属性和方法,我们可以轻松实现UDP广播功能。 3. **设置Socket控件**: - **Protocol属性**:设置为2表示使用UDP协议。 - **LocalPort属性**:指定本地端口号,用于接收和发送数据。 - *...
制定udp广播的端口(如果收发用同一个端口就会一直接收到自己给自己广播的消息)2.启动后向局域网广播约定的字符串(字符串包含了广播端的IP和用来接收响应的端口号)3.设备需要内置一个功能,打开约定的接收广播...
在IT领域,网络通信是...总的来说,Qt的QUdpSocket类为开发人员提供了简单易用的接口,使得在C++应用中实现UDP通信的单播、组播和广播变得轻而易举。通过理解这些基本概念和操作,你可以构建高效、可靠的UDP通信系统。
本软件实现了两台甚至多台电脑之间使用UDP通信的功能,包括单播,广播,组播的功能实现,三种发送方式的切换在代码中已标明。 默认状态为本机发送,本机接受,也就是接收端的ip地址设置为127.0.0.1,用户可根据实际...
总结来说,W5500配合UDP组播功能,可以实现高效的多点广播通信。开发者需要熟悉W5500的寄存器配置、IGMP协议处理以及套接字编程,才能充分利用这一特性。在实际项目中,结合具体的硬件平台和软件框架,可以开发出...
UDP通信主要分为三种类型:单播、广播和多播。 1. **单播**: - 单播是最常见的通信方式,类似于邮政系统中的点对点邮寄。发送方将数据包发送给一个特定的接收方,每个数据包只被发送一次,且仅由一个接收方接收。...
在单播通信中,数据包被发送到特定的单一接收者,与广播和多播不同。 要实现51单片机和W5500的UDP单播通信,我们需要完成以下步骤: 1. **硬件连接**:将51单片机的SPI接口(通常包括SCK、MISO、MOSI和CS)与W5500...
**二、广播与多播** 广播是网络通信的一种方式,其中一台设备向同一网络中的所有其他设备发送数据包。在IP层,广播地址通常为子网掩码全为1的地址,如255.255.255.255。而多播则允许发送者向一组特定的接收者发送...
通过学习和实践这些基本概念,你可以创建更复杂的UDP广播应用程序,例如用于局域网内的设备发现、多播通信或者实时数据传输等场景。在开发过程中,可以利用`netcat`、`tcpdump`等工具进行测试和调试,以确保程序的...
WPF+C#广播和单播示例 实现功能:添加聊天组 显示聊天组成员 多人聊天和单聊 界面简单,目的在于联系UDP通讯,对于图片的处理还未完成,Demo中的保存数据按钮目前没添加功能,欢迎大家一块研究
根据提供的文件信息,本文将详细解释VC环境下使用UDP协议实现组播通信的关键概念和技术细节。 ### 一、组播通信概述 #### 1.1 组播定义 组播(Multicast)是一种允许一个或多个发送者(一个发送者称为源)发送单一...
### 实现简单UDP组播多播程序 创建UDP组播多播程序涉及以下步骤: 1. 打开一个UDP套接字并将其绑定到一个本地端口。 2. 设置套接字为多播模式,使用setsockopt()函数设置IP_ADD_MEMBERSHIP选项,加入所需的组播组。 ...
在本文中,我们将深入探讨如何使用W5500模块在UDP模式下实现与上位机的通信。W5500是一款集成了SPI接口的以太网控制器,广泛应用于嵌入式系统中,提供了全硬件TCP/IP协议栈,使得在微控制器中实现网络通信变得更加...
**MFC的UDP广播实验程序详解** MFC(Microsoft Foundation Classes)是微软提供的一套用于构建Windows应用程序的C++类库。在这个实验程序中,我们关注的是如何利用MFC实现UDP(User Datagram Protocol)的广播功能...
UDP组播,也称为多播,是一种网络通信方式,它允许单个数据源向多个接收者同时发送数据,而无需为每个接收者单独建立连接。这种方式在广播和流媒体服务中尤为常见,因为它能有效利用网络带宽并降低服务器负载。在...
在QT中实现UDP(User Datagram Protocol)组播,可以让我们构建能够高效地向多个接收者广播数据的应用程序。UDP是一种无连接的协议,适用于实时数据传输,如音频、视频流等,因为它不需要建立连接和维护连接状态,...
实现UDP广播的基本步骤包括: 1. 创建套接字:在C/C++中,使用`socket()`函数创建一个UDP套接字,指定协议族为AF_INET(IPv4)或AF_INET6(IPv6),类型为SOCK_DGRAM(UDP)。 2. 设置广播选项:使用`setsockopt()...
UDP(User Datagram Protocol)是传输...总之,UDP Socket组播是一种高效的数据传输方式,适合需要向多个接收者广播信息的场景。正确配置和使用多播Socket,可以在不增加网络负担的情况下,实现大规模的点对多点通信。