私は放送に取り組んでいますが、物事を機能させることさえかなりひどく失敗しています。setsockopt() 呼び出しを実行する必要があることはわかっていますが、ブロードキャストがネットワーク上のすべてのボックスに送信されるようにするには、その前に何が必要ですか? ネットワークアドレスを補完することについての何かをぼんやりと覚えています。助けてくれてありがとう。
2 に答える
setsockopt() を使用する必要はありません。特別なアドレス 255.255.255.255 に送信された UDP パケットは、ローカル ネットワーク上のすべてのアドレスに送信されます。
ブロードキャスト先のネットワークがローカルでない場合は、そのネットワークのブロードキャスト アドレスを使用する必要があります (ivymike のコメントによる)。慣例により、通常は (常にではありませんが) サブネット内の最後の IP です。
ブロードキャスト アドレスは多くの DOS 攻撃で使用され、フィルタリングされる可能性が高いことに注意してください。
Windowsの世界に関しては、受け入れられた答えが正しいかどうかはわかりません。
この回答UDPSocket
に触発されたクラスがあります。それはかなり長い間使用されており、正常に機能しています。しかし、それを使用してブロードキャストする関数を作成しようとしたところ、Windows Socket Error 10013 - Permission Denied で呼び出しが失敗しました (少なくとも Windows 7 システムでテストした場合)。WakeOnLan()
255.255.255.255
sendto()
そこで、この質問に対する Remy Lebeau の回答に基づいUDPSocket
た呼び出しでコンストラクターを拡張し、呼び出しの直後に配置しました。これによりブロードキャストが可能になり、私の機能を作成する際のミッシングリンクとなりました。setsockopt()
socket()
WakeOnLan()
これが「答え」であることを示唆しているわけではありませんが、コメントするには長すぎます.コミュニティウィキは、受け入れられた答えが不十分であることに気付いた人の利益のために、より一般的な真実をこの答えに編集したいと思うかもしれません.