19

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

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

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

4

2 回答 2

26

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

资源

于 2013-04-25T15:19:43.520 回答
3

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

于 2013-04-25T15:02:56.873 回答