使用QUdpSocket发送数据报

时间:2011-06-16 04:45:58

标签: qt4 network-programming datagram

我正在尝试使用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'函数设置套接字来监听数据包,此时我真的不感兴趣。这是控制使用哪个适配器的正确方法,还是有更简单的方法来执行此操作?

由于

2 个答案:

答案 0 :(得分:3)

你需要这样的东西

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

这将发送udp广播包。

答案 1 :(得分:2)

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

adapter1:地址192.168.1.104子网掩码255.255.255.0 broadcast:192.168.1.255

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

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

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