2013-04-25 462 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。 – 2013-04-25 14:49:32

+1

你應該把它作爲一個答案@PeterLawrey – Fildor 2013-04-25 14:59:22

回答

16

「套接字語義要求應用程序在嘗試將數據報發送到基地址或廣播地址之前設置SO_BROADCAST選項,這可以防止應用程序意外地將數據報發送到多個系統。

Source

+0

非常感謝。我想這適用於Linux和Windows以及 – henryyao 2013-04-25 15:23:15

+0

源鏈接已損壞:( – 2016-07-26 16:13:43

+0

我已經修復了它。 – 2016-07-26 17:09:50

2

在大多數情況下,這些調用只是在OS中調用相同的東西。這可能是您的操作系統的限制,而不是Java。

+0

好吧,但進一步的問題是爲什麼Linux需要這樣做?同樣的東西似乎也用在窗戶以及 – henryyao 2013-04-25 15:09:38