基于CH32V307的组播应用
概述
组播是主机间一对多的通讯模式, 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机,而是属于一组主机。一个组播地址表示一个群组,需要接收组播报文的接收者都加入这个群组。
实现方式
这里先讨论接收所有组播即不过滤组播的方式
首先需要创建一个UDP socket,这里可以直接使用官方提供的UDP例程,创建UDP socket的目的是为了板子和上位机通信,
然后需要修改以太网驱动文件,将组播过滤切换成不过滤方式
之后,即可打开网络调试助手,进行板子接收组播帧测试
收组播ip为224.1.1.10的数据包
收组播ip为224.1.2.5的数据包
收组播ip为224.1.3.22的数据包
以上可以看出已经实现接收所有组播包
接下来看一下如何过滤接收的组播包,也就是接收某些特定的组播帧
首先需要将接收组播方式改成完美过滤
然后我们需要计算出想要过滤组播ip的mac地址,如图,组播ip为224.1.1.10计算的mac为 01-00-5e-01-01-0a,计算方式可以参考该链接https://blog.csdn.net/imzhujun/article/details/41045231
计算出之后,将算出的mac地址填入mac地址寄存器,具体流程可以看一下官方提供的组播过滤例程
然后就可以开启上位机测试
在组播ip为224.1.1.10时,可以正常收到数据
当改变组播ip为224.1.1.11时,则无法正常接收数据,只能接收指定组播ip的数据包
说完接收,我们看一下如何主动发组播
调用官方协议栈的发送函数即可发送我们想发送的组播包,需要填入的参数分别为socket号,要发送的数据,数据长度,组播地址,目标端口号
之后,可以在网络调试助手和抓包软件上看到主动发出的数据
有的调试助手无法收到板子发出的组播,那是因为该调试工具没有发出加入组播组的请求,例如,我们发送的组播ip为224.1.1.10,正常的应该是如下图所示发出一个加入组播的请求,若是调试工具没有发出该请求,则无法收到数据,可尝试更换调试工具或者尝试手动发出加入组播请求