Qt4 使用QUdpSocket发送数据报

Qt4 使用QUdpSocket发送数据报,qt4,network-programming,datagram,Qt4,Network Programming,Datagram,我正在尝试使用QUdpSocket发送数据报。以下是我正在使用的代码: udpSocket = new QUdpSocket(this); QByteArray datagram = "Message"; udpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45454); 现在,如果我在只有一个网络适配器的计算机上运行它,它似乎可以正常工作。但是,如果有多个适配器,我需要能

我正在尝试使用QUdpSocket发送数据报。以下是我正在使用的代码:

udpSocket = new QUdpSocket(this);
QByteArray datagram = "Message";
udpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45454);
现在,如果我在只有一个网络适配器的计算机上运行它,它似乎可以正常工作。但是,如果有多个适配器,我需要能够控制用于发送数据报的适配器。我发现,如果我按如下方式绑定套接字:

udpSocket->bind(QHostAddress("192.168.1.104"), 45454);
然后,我可以强制将数据报发送到与该IP相关联的本地网络上(否则它似乎会随机选择一个)。然而,“bind”函数设置套接字来监听数据包,我现在对此并不感兴趣。这是控制使用哪个适配器的正确方法,还是有更直接的方法


谢谢你需要这样的东西

QHostAddress myBroadcastAddress = QHostAddress("192.168.255.255");
udpSocket->writeDatagram(datagram.data(),datagram.size(), myBroadcastAddress , 45454 )

这将发送udp广播数据包。

子网的广播地址始终是子网中的最高地址。就你而言:

适配器1:地址192.168.1.104子网掩码255.255.255.0广播:192.168.1.255

适配器2:地址192.168.56.1子网掩码255.255.255.0广播:192.168.56.255

因此,您需要您想要广播的适配器的地址和子网掩码来找到正确的广播地址


如果您使用适配器地址和子网掩码来计算广播地址,则这应该适用于IPv4网络。

谢谢您的建议,但是使用地址“192.168.255.255”没有帮助。我的计算机在适配器1上的IP地址是192.168.1.104,在适配器2上的IP地址是192.168.56.1,因此我假设使用上述地址,它仍然选择了错误的适配器。但是,如果我使用“192.168.1.255”,它似乎确实有效。然而,我对网络没有太多经验。这将有多强大。也就是说,它会在任何(大多数)系统上工作吗?谢谢。QHostAddress::Broadcast是一个常量,它始终是255.255.255.255,即通用广播地址。不幸的是,可以在任何适配器上工作的地址都不能告诉您的操作系统要使用哪个适配器。