3

我正在尝试使用 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' 函数设置套接字来监听数据包,我现在对此并不感兴趣。这是控制使用哪个适配器的正确方法,还是有更直接的方法来做到这一点?

谢谢

4

2 回答 2

3

你需要这样的东西

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

这将发送 udp 广播数据包。

于 2011-06-16T06:13:25.063 回答
2

子网的广播地址始终是子网中的最高地址。在你的情况下:

adapter1:地址 192.168.1.104 子网掩码 255.255.255.0 广播:192.168.1.255

adapter2:地址 192.168.56.1 子网掩码 255.255.255.0 广播:192.168.56.255

所以你需要你想要广播的适配器的地址和子网掩码来找到正确的广播地址。

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

于 2011-08-03T11:42:49.957 回答