2013-04-25 8 views
13

ソケットから情報をブロードキャストする場合は、SocketOptions.SO_BROADCASTを有効にする必要があります。しかし、なぜそれが必要なのか分かりません。ブロードキャストを有効にするためにSocketOptions.SO_BROADCASTが必要なのはなぜですか?

ユニキャストアドレスを設定するのと同じ方法で、ブロードキャストアドレスでパケットを設定します。それから、普通のソケットを通して送る必要があります。そのUDPソケットであれば、そのパケットにUDPヘッダーが追加され、次に受信者のIPアドレスを含むIPヘッダー(この場合ブロードキャストアドレスは192.168.255.255の形式)にMACアドレス(FF:FF:FF:FF)が追加されます。

私はルータがパケットを取得し、ブロードキャストを実行すると思います。なぜソケット属性をSO_BROADCASTに設定する必要があるのか​​わかりません。

+1

ほとんどの場合、これらの呼び出しは、単にOSで同じことを呼び出します。これは、JavaではなくOSの制約になりそうです。 –

+1

あなたは答えとして@PeterLawrey – Fildor

答えて

16

"ソケットセマンティクスでは、データグラムをベースアドレスまたはブロードキャストアドレスに送信する前にアプリケーションがSO_BROADCASTオプションをオンにする必要があります。これにより、アプリケーションが誤って多くのシステムにデータグラムを送信することを防ぎます。

Source

+0

ありがとうございます。私はこれがLinuxとWindowsにも当てはまると思います – henryyao

+0

ソースリンクが壊れています:( –

+0

私は今修正しました。 –

2

ほとんどの場合、これらの呼び出しはOSで同じものを呼び出すだけです。これは、JavaではなくOSの制約になりそうです。

+0

を置くべきですが、それ以上の疑問はなぜLinuxがそれをする必要があるのでしょうか?同じことが窓にも使われているようです。 – henryyao

関連する問題