当前位置:首页 > 代码 > 正文

udp组播发送端代码(udp协议支持广播和组播)[20240426更新]

admin 发布:2024-04-26 19:42 136


今天给各位分享udp组播发送端代码的知识,其中也会对udp协议支持广播和组播进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Python 实现udp组播

有关知识

基本概念

单播:两个主机间单对单的通信

广播:一个主机对整个局域网上所有主机上的数据通信(网络地址全1)

单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网的主机进行通信

组播:实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机

IP组播(也称多址广播或多播),是一种允许一台或多台主机发送数据包到多台主机的TCP/IP网路技术。

多播是 IPv6 数据包的 3 种基本目的地址类型之一,多播是一点对多点的通信, IPv6 没有采用 IPv4 中的组播术语,而是将广播看成是多播的一个特殊例子。

多播组只能用UDP 或者原始套接字实现,不能用TCP。

广播地址

在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。

传输层只有UDP可以广播 。

组播地址

IP 组播通信必须依赖于 IP 多播地址,在 IPv4 中它是一个 D 类 IP 地址,范围从 224.0.0.0 到 239.255.255.255,并被划分为局部链接多播地址、预留多播地址和管理权限多播地址3类:

局部链接多播地址范围在 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,可限制多播范围。

组播地址与MAC地址的映射

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

这个我们可以这样理解,多播地址就类似于 QQ 群号,多播组相当于 QQ 群,一个个的主机就相当于群里面的成员。

设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤,这个过滤过程是网络驱动或IP层自动完成。(设备驱动程序会对多播数据进行过滤,将其发到相应的位置)

组播应用

单点对多点应用

点对多点应用是指一个发送者,多个接收者的应用形式,这是最常见的多播应用形式。典型的应用包括:媒体广播、媒体推送、信息缓存、事件通知和状态监视等。

多点对单点应用

多点对点应用是指多个发送者,一个接收者的应用形式。通常是双向请求响应应用,任何一端(多点或点)都有可能发起请求。典型应用包括:资源查找、数据收集、网络竞拍、信息询问等。

多点对多点应用

多点对多点应用是指多个发送者和多个接收者的应用形式。通常,每个接收者可以接收多个发送者发送的数据,同时,每个发送者可以把数据发送给多个接收者。典型应用包括:多点会议、资源同步、并行处理、协同处理、远程学习、讨论组、分布式交互模拟(DIS)、多人游戏等。

参考的文章

下面实现一个python(3.8)的演示原理的版本

功能:1.每个客户端随机生成一个id当做标识

2.每个客户端绑定本机一个Ip的端口(在同一台机器上面可以启动多个脚本)

3. 加入同一网段的一个组播地址

4. 启动后,发送一个消息

5. 收到消息后,根据id判断消息是否是自己发出的,其它客户端的时候回一个消息

启动两个脚本以后效果如下:

ps:在相同网段可以很容易实现组播。跨网段组播必须打开三层交换机的组播路由协议,一般是PIM 稀疏模式,一般三层交换机的默认配置是没有打开组播路由的。(待实践)

求用udp发广播消息的C代码。

//发送端程序

#include stdio.h

#include winsock.h

int main(int argc, char* argv[])

{

WSADATA wsaData; //指向WinSocket信息结构的指针

SOCKET sockListener;

SOCKADDR_IN sin,saUdpServ;

BOOL fBroadcast = TRUE;

char sendBuff[1024];

int nSize;

int ncount=0;

if(WSAStartup(MAKEWORD( 1, 1 ), wsaData )!=0)//进行WinSocket的初始化

{

printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1

return -1;

}

sockListener=socket(PF_INET,SOCK_DGRAM,0);

setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST,

(CHAR *)fBroadcast,sizeof ( BOOL ));

sin.sin_family = AF_INET;

sin.sin_port = htons(0);

sin.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind( sockListener, (SOCKADDR *)sin, sizeof(sin))!=0)

{

printf("Can't bind socket to local port!Program stop.\n");//初始化失败返回-1

return -1;

}

saUdpServ.sin_family = AF_INET;

saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );

saUdpServ.sin_port = htons (7001);//发送用的端口,可以根据需要更改

nSize = sizeof ( SOCKADDR_IN );

while(1)

{

sprintf(sendBuff,"Message %d",ncount++);

sendto ( sockListener,sendBuff,

lstrlen (sendBuff),

0,

(SOCKADDR *) saUdpServ,

sizeof ( SOCKADDR_IN ));

printf("%s\n",sendBuff);

}

return 0;

}

/////////////////////

//接收

#include stdio.h

#include winsock.h

#include conio.h

int main(int argc, char* argv[])

{

WSADATA wsaData; //指向WinSocket信息结构的指针

SOCKET sockListener;

SOCKADDR_IN sin,saClient;

char cRecvBuff[1024];

int nSize,nbSize;

int iAddrLen=sizeof(saClient);

if(WSAStartup(MAKEWORD( 1, 1 ), wsaData )!=0)//进行WinSocket的初始化

{

printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1

return -1;

}

sockListener=socket(AF_INET, SOCK_DGRAM,0);

sin.sin_family = AF_INET;

sin.sin_port = htons(7001);//发送端使用的发送端口,可以根据需要更改

sin.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind( sockListener, (SOCKADDR FAR *)sin, sizeof(sin))!=0)

{

printf("Can't bind socket to local port!Program stop.\n");//初始化失败返回-1

return -1;

}

while(1)

{

nSize = sizeof ( SOCKADDR_IN );

if((nbSize=recvfrom (sockListener,cRecvBuff,1024,0,

(SOCKADDR FAR *) saClient,nSize))==SOCKET_ERROR)

{

printf("Recive Error");

break;

}

cRecvBuff[nbSize] = '\0';

printf("%s\n",cRecvBuff);

}

return 0;

}

有谁能给我贴一份可用的 UDP 组播代码吗

组播技术可形象的描述如下: 

   假设一个企业分布于各地的子公司(两个以上)之间需要通过Internet进行实时的交换信息(数据,声音,图像),他们的计算机可能不属于同一物理网 络,甚至不属于同一自治系统,这种通信的特点是“多点”式的。子公司发出的数据希望其他子公司都能收到,而总部发出的指示全体子公司都应收到。这种多点通信方式为组内广播,即组播技术,也称多播技术,多目网关技术。

1.2、TCP/IP传送方式

组播技术是TCP/IP传送方式的一种。在我们讨论组播技术之前先来看看TCP/IP传送方式。TCP/IP传送方式有三种:单播,广播,组播。

单播(Unicast)传输:在发送者和每一接收者之间需要单独的数据信道。 如果一台主机同时给很少量的接收者传输数据,一般没有什么问题。但如果有大量主机希望获得数据包的同一份拷贝时却很难实现。这将导致发送者负担沉重、延迟长、网络拥塞;为保证一定的服务质量需增加硬件和带宽。

组播(Multicast)传输:它提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)。

广播(Broadcast)传输:是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。广播意味着网络向子网主机都投递一份数据包,不论这些主机是否乐于接收该数据包。然而广播的使用范围非常小, 只在本地子网内有效,因为路由器会封锁广播通信。广播传输增加非接收者的开销。

组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。 组播源把数据包发送到特定组播组,而只有属于该组播组的地址才能接收到数据包。组播可以大大的节省网络带宽, 因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。 它提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络, 也可以来自不同的物理网络(如果有组播路由器的支持)。

udp组播发送端代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于udp协议支持广播和组播、udp组播发送端代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/649.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载