在同一局域网下,可以使用 IPv4 或 IPv6 的组播地址来进行 UDP 组播通信。以下是几个常用的 IPv4 组播地址范围:
- 224.0.0.0 - 224.0.0.255:预留地址,不可分配
- 224.0.1.0 - 238.255.255.255:全球范围内的公共组播地址
- 239.0.0.0 - 239.255.255.255:本地管理组(例如企业内部)可用的组播地址
对于 Qt 程序,可以使用 QHostAddress 类来设置和解析 IP 地址。以下是一个使用 Qt 进行 UDP 组播的示例代码:
#include <QtNetwork>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QUdpSocket udpSocket;
QHostAddress groupAddress("239.x.x.x"); // 替换为合适的组播地址
if (!udpSocket.bind(QHostAddress::AnyIPv4, 12345)) {
qDebug() << "Failed to bind UDP socket:" << udpSocket.errorString();
return 1;
}
if (!udpSocket.joinMulticastGroup(groupAddress)) {
qDebug() << "Failed to join multicast group:" << udpSocket.errorString();
return 1;
}
QObject::connect(&udpSocket, &QUdpSocket::readyRead, [&]() {
while (udpSocket.hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket.pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket.readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
qDebug() << "Received data from" << sender.toString() << ":" << datagram;
}
});
return app.exec();
}
在上述代码中,需要将 groupAddress
替换为合适的 IPv4 组播地址。其中,UDP Socket 使用了 Qt 的 QUdpSocket
类,并通过 bind()
函数绑定到特定端口(例如 12345)。然后,使用 joinMulticastGroup()
函数加入指定的组播组。
当有数据包到达时,readyRead
信号会被触发,可以通过调用 pendingDatagramSize()
获取数据包大小,并通过 readDatagram()
函数读取数据内容和发送者的 IP 地址。
内容由零声教学AI助手提供,问题来源于学员提问