Подтвердить что ты не робот

Зачем нужен SocketOptions.SO_BROADCAST для включения трансляции?

Если мы хотим передавать информацию из сокета, нам нужно включить SocketOptions.SO_BROADCAST. Однако я не понимаю, почему это необходимо.

Насколько я понимаю, мы устанавливаем пакет с широковещательным адресом, точно так же, как и для одноадресного адреса. Тогда нам просто нужно отправить его через обычный сокет. Если его UDP-сокет, то заголовок UDP будет добавлен в этот пакет, а затем заголовок IP, содержащий IP-адрес получателя (в этом случае это широковещательный адрес в форме 192.168.255.255), а затем MAC-адрес (FF:FF:FF:FF).

Я думаю, что маршрутизатор получит пакет и выполнит трансляцию. Я не понимаю, почему нам нужно установить атрибут socket SO_BROADCAST.

4b9b3361

Ответ 1

"Семантика Socket требует, чтобы приложение установило параметр SO_BROADCAST, прежде чем пытаться отправить дейтаграмму на базовый или широковещательный адрес. Это защищает приложение от случайной отправки дейтаграммы во многие системы."

Источник

Ответ 2

В большинстве случаев эти вызовы просто вызывают одно и то же в ОС. Вероятно, это будет ограничение вашей ОС, а не Java.