3

QUdpSocket を使用してデータグラムを送信しようとしています。以下は私が使用しているコードです:

udpSocket = new QUdpSocket(this);
QByteArray datagram = "Message";
udpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45454);

ネットワーク アダプタが 1 つしかないコンピュータでこれを実行すると、問題なく動作するようです。ただし、複数のアダプターがある場合は、データグラムの送信に使用するアダプターを制御できる必要があります。次のようにソケットをバインドすると、次のことがわかりました。

udpSocket->bind(QHostAddress("192.168.1.104"), 45454);

次に、その IP に関連付けられたローカル ネットワークでデータグラムを強制的に送信できます (そうしないと、ランダムに 1 つを選択するように見えます)。しかし、'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 に答える