目录
B站视频讲解广播通信机制实现https://www.bilibili.com/video/BV1zNvkeAEZy?p=15B站视频讲解多播通信机制实现
https://www.bilibili.com/video/BV1zNvkeAEZy?p=16
广播通信机制GitHub源码https://github.com/KeepTryingTo/QT_Learning/tree/main/QtUDPSocket/QtBroadCast
多播通信机制GitHub源码https://github.com/KeepTryingTo/QT_Learning/tree/main/QtUDPSocket/QtMultiCast
本博文在QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)进行改进实现广播和多播的机制,从而实现一个服务端可以同时向多个客户端发送消息。同时建议读者前去看前一篇博文UDP协议的通信机制,然后来看这篇博文会好很多。
实现广播和多播机制之前,首先来了解什么是广播和多播机制以及它们之间的区别。
广播(Broadcast) | 多播(Multicast) |
---|---|
|
|
|
|
注:其实只要知道它们之间的区别以及大致用途即可,具体的实现看代码(代码和上次博文写的大致差不多,只是有些地方稍微不同,因此,读者可以看之前的视频讲解或者代码)。
1.基于UDP协议的广播通信机制
/*共享相同的地址
ReuseAddressHint: 向 QAbstractSocket 提供提示,即使地址和端口已经被另一个Socket绑定,
它也应该尝试重新绑定服务。
ShareAddress: 允许其他服务(其他进程的)绑定到相同的地址和端口。通过将此选项与
ReuseAddressHint 结合使用,将允许您的服务重新绑定现有的共享地址。
*/
注:虽然连接的热点,但是由于只有一台主机,因此,这里采用共享地址的方式,也就是一个主机可以同时使用相同的IP地址和端口号。
Qt中基于UDP协议的广播通信机制
2.基于UDP协议的多播通信机制
由于IPV4多播地址的范围为IPv4中的224.0.0.0到239.255.255.255,因此在绑定多播地址的过程中可能会出现以下报错:不能直接将套接字绑定到 QHostAddress::Any(当前主机的地址)
并同时监听 IPv4 多播组。这是因为多播组的地址是特定于 IP 版本的(IPv4 或 IPv6),并且套接字在绑定时需要明确指定它要监听的 IP 版本。
QAbstractSocket: cannot bind to QHostAddress::Any(or an IPv6 address) and join an IPv4
multicast group; bind to QHostAddress::AnyIPv4 instead if you want to do this
因此修改: socket->bind(端口号,QAbstractSocket::ReuseAddressHint);=>绑定到 IPv4 地址 socket->bind(QHostAddress::AnyIPv4, 端口号).
Qt中基于UDP协议的多播通信机制