为什么我们需要SocketOptions.SO_BROADCAST才能启用广播?

时间:2013-04-25 14:48:16

标签: sockets

如果我们想要从套接字广播信息,我们需要启用SocketOptions.SO_BROADCAST。但是,我不明白为什么这是必要的。

我的理解是我们使用广播地址设置数据包,就像设置单播地址一样。然后我们只需要通过常规套接字发送它。如果是UDP套接字,那么UDP报头将被添加到该数据包,然后是包含接收者IP地址的IP报头(在这种情况下是192.168.255.255形式的广播地址),然后是MAC地址(FF:FF:FF:FF)已添加。

我认为路由器将获取数据包并执行广播。我不明白为什么我们需要将socket属性设置为SO_BROADCAST

2 个答案:

答案 0 :(得分:21)

“套接字语义要求应用程序在尝试将数据报发送到基址或广播地址之前设置SO_BROADCAST选项。这可以防止应用程序意外地将数据报发送到许多系统。”

Source

答案 1 :(得分:3)

在大多数情况下,这些调用只是在操作系统中调用相同的东西。这可能是对您的操作系统的限制,而不是Java。