QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)

目录

1.基于UDP协议的广播通信机制

2.基于UDP协议的多播通信机制


B站视频讲解广播通信机制实现icon-default.png?t=N7T8https://www.bilibili.com/video/BV1zNvkeAEZy?p=15B站视频讲解多播通信机制实现icon-default.png?t=N7T8https://www.bilibili.com/video/BV1zNvkeAEZy?p=16
广播通信机制GitHub源码icon-default.png?t=N7T8https://github.com/KeepTryingTo/QT_Learning/tree/main/QtUDPSocket/QtBroadCast
多播通信机制GitHub源码icon-default.png?t=N7T8https://github.com/KeepTryingTo/QT_Learning/tree/main/QtUDPSocket/QtMultiCast

QT初学案例教程
QT6.6.0实现打开电脑摄像头或其他的外接摄像头(实现拍照功能)
QT6.6.0实现简单的录音器
QT6.6.0实现一个简单的视频和音频播放器
​​​​​​​T6.6.0实现简单的视频录制(包含语音录制)器
QT6.6.0关于QMediaMetaData功能以及列子说明使用方法
QT6.6.0实现QtCamera功能(拍照,录像以及图像和视频的相关配置)
T6.6.0实现更好的视频播放器(前期改进)
QT6.6.0实现图表如饼图,柱状图,散点图以及盒图等的基本使用
QT6.6.0实现客户端Socket编程以及socket测试软件通信
QT6.6.0 实现服务端Server和多个客户端Client通信以及socket测试软件通信
QT6.6.0 实现QNetworkAccessManager的基本应用以及其拓展使用
QT6.6.0 实现服务端Server和多个客户端Client互相发送文件信息
QT6.6.0和QT6.0以下的版本实现FTP文件上传和下载(过程详解)
QT6.6.0实现QNetworkInterface网络接口,QHostAddress网络地址IP以及域名解析等相关信息查询。
QT6.6.0基于QTcpSocket和QTcpServer实现多个客户端群聊
QT6.6.0实现基于UDP协议的简单通信(过程详解)

本博文在QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)进行改进实现广播和多播的机制,从而实现一个服务端可以同时向多个客户端发送消息。同时建议读者前去看前一篇博文UDP协议的通信机制,然后来看这篇博文会好很多。

实现广播和多播机制之前,首先来了解什么是广播和多播机制以及它们之间的区别。

广播和多播机制
广播(Broadcast)多播(Multicast)
  • 广播是指在一个局域网(同一个热点或者同一个路由器LAN)中向所有的网上节点发送信息。这意味着当一台主机发送广播信息时,该子网内的所有其他主机都将接收并处理该信息,无论它们是否需要这些数据。
  • 广播通常用于需要向局域网内所有设备发送相同数据的场景,如地址解析协议(ARP)、动态主机配置协议(DHCP)和网络时间协议(NTP)等。
  • 多播是指将数据包从一个源点发送到多个目的地(不同的IP地址)的网络通信模式。与广播不同,多播允许发送者将数据发送到一组特定的接收者,而不是整个子网内的所有主机。
  • 多播使用特定的多播IP地址范围(如IPv4中的224.0.0.0到239.255.255.255)来标识多播组,只有加入该多播组的接收者才能接收到发送者发送的数据。
  • 适用于需要向局域网内所有设备发送相同信息的场景,如网络发现、时间同步等。
  • 但由于广播信息会被子网内的所有主机接收,因此可能会带来较大的网络负载和不必要的处理开销。
  • 适用于需要将数据高效分发到多个特定接收者的场景,如视频直播、文件分发、在线游戏等。
  • 多播通过减少不必要的数据复制和传输,可以显著提高网络传输效率,降低网络负载。

注:其实只要知道它们之间的区别以及大致用途即可,具体的实现看代码(代码和上次博文写的大致差不多,只是有些地方稍微不同,因此,读者可以看之前的视频讲解或者代码)。

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协议的多播通信机制

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值