2 つの異なるプログラムで構成されるアプリケーションを作成しています。一方 (クライアント) は UDP ブロードキャスト パケットを送信し、もう一方 (サーバー) は受信したすべてのパケットをログに記録します。
アプリケーションは Qt で書かれています - 私は基本的にUDP マルチキャストの例をサーバーに使用しました。クライアントは次のようになります。
QUdpSocket * socket = new QUdpSocket;
QByteArray datagram("This is a test!");
socket->writeDatagram(datagram.data(), datagram.size(),
QHostAddress::Broadcast, 45454);
コードは実際に機能しますが、非常に貧弱です。そのため、到着するパケットはほとんどありませんでした (約 3.1% に計算しました)。これで、UDP がすべてのパケットがドロップされることなく到着することを保証するわけではないことを完全に理解しましたが、3.1% はばかげているように見え、何か間違ったことをしているのではないかと考えています。
クライアントとサーバーの両方が、他の目的で使用されていないワイヤレス ネットワーク上で実行されています。パケットの送信速度を遅くしたり速くしたりしてみましたが、違いはありませんでした。
クライアント: Ubuntu 11.10 64 ビット
サーバー: Ubuntu 12.04 64 ビット
編集:QHostAddress::Broadcast
上記の例で(サーバーのIPアドレスはQHostAddress("x.x.x.x")
どこですか)に置き換えましたが、パケットはどれもドロップされません。したがって、問題はブロードキャスト パケットに限定されているようです。x.x.x.x
さらに編集:クライアントを Windows 7 に切り替えると、パケット損失は 9% のみになります (パケットの 91% が到着します)。