LabVIEW使用UDP组播发送数据

来源:互联网 发布:免费的英语口语软件 编辑:程序博客网 时间:2024/06/08 13:11

最近在架构下位机程序时,为了满足其他用户程序随时能使用下位机所采集的数据, 考虑到数据接口的通用性和懒人(少编程)的原则,增加了UDP的通信方式,由于网络中还有其他设备也使用了UDP通信,为避免网络带宽的损耗,选择了UDP组播发送数据的模式。将编程过程中的一些经验和程序总结如下:


IP网络传输方式共分为单播,组播(多播),广播三种。平时我们最常用的一对一的网络传输方式就是属于单播;而组播是一对多的传输方式,其中有个组播组的 概念,发送端将数据向一个组内发送,网络中的路由器通过底层的IGMP协议自动将数据发送到所有监听这个组的终端。至于广播则和组播有一些相似, 区别是路由器向子网内的每一个终端都投递一份数据包,不论这些终端是否乐于接收该数据包。 相对于极度消耗网络带宽的广播来说(广播只能在内网广播),UDP组播有了很大的优化,只有终端加入到了一个广播组,UDP组播的数据才能被他接收到。 UDP组播是采用的无连接,数据报的连接方式,所以是不可靠的。也就是数据能不能到达接受端和数据到达的顺序都是不能保证的。但是由于UDP不用保证数据的可靠性,所有数据的传送速度是很快的。

广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。  

  在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcast address)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。  
  单播(unicasting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。

  • 硬件组播

硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。

  • IP组播地址

        IP组播通信需要一个特殊的组播地址,IP组播地址是一组D类IP地址,范围从224.0.0.0 到 239.255.255.255。其中还有很多地址是为特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因为他们大多是为了特殊的目的保持的(比如IGMP协议)。IP组播(IP multicasting)是对硬件组播的抽象,是对标准IP网络层协议的扩展。它通过使用特定的IP组播地址,按照最大投递的原则,将IP数据报传输到一个组播群组(multicast group)的主机集合。它的基本方法是:当某一个人向一组人发送数据时,它不必将数据向每一个人都发送数据,只需将数据发送到一个特定的预约的组地址,所有加入该组的人均可以收到这份数据。这样对发送者而言,数据只需发送一次就可以发送到所有接收者,大大减轻了网络的负载和发送者的负担。  

  • IGMP协议

        IGMP是IP组播的基础。在IP协议出现以后为了加入对组播的支持,IGMP产生了。IGMP所做的实际上就是告诉路由器,在这个路由器所在的子网内有 人对发送到某一个组播组的数据感兴趣,这样当这个组播组的数据到达后面,路由器就不会抛弃它,而是把他转送给所有感兴趣的客户。假如不同子网内的A和B要 进行组播通信,那么位于AB之间的所有路由器必须都要支持IGMP协议,否则AB之间不能进行通信。


以上所有内容非常的多,比较晦涩难懂。

所有我们用白话来说,UDP组播其实就是一组成员在一个组播地址下相互通讯的一组协议,在不指定发送端口时,组内的成员可以交换信息(类似微信的群聊),同时也可以指定发送时的端口,来决定组内谁可以接收该数据(相当于微信群聊的@功能,只是这里的@功能,别人看不到,即私信了。LabVIEW通过打开UDP多点传送函数如来指定接受的端口,在发送端则使用UDP发送函数指定接收的地址。


参考如下例程:例程为LabVIEW自带的UDP组播范例,可以帮助我们学习UDP组播通讯。例程中分为发送器和接收器

发送器程序:



接收器






0 0