2013-04-25 12 views
13

Se vogliamo trasmettere informazioni da un socket, dobbiamo abilitare SocketOptions.SO_BROADCAST. Tuttavia, non capisco perché sia ​​necessario.Perché abbiamo bisogno di SocketOptions.SO_BROADCAST per abilitare la trasmissione?

La mia comprensione è che impostiamo il pacchetto con un indirizzo di trasmissione, proprio come si imposta un indirizzo unicast. Quindi dobbiamo solo inviarlo tramite una presa normale. Se è un socket UDP, verrà aggiunta un'intestazione UDP a quel pacchetto e quindi un'intestazione IP contenente l'indirizzo IP del destinatario (in questo caso l'indirizzo di broadcast sotto forma di 192.168.255.255), quindi verrà aggiunto un indirizzo MAC (FF:FF:FF:FF) .

Penso che il router riceverà il pacchetto ed eseguirà la trasmissione. Non capisco perché è necessario impostare l'attributo socket su SO_BROADCAST.

+1

Nella maggior parte dei casi queste chiamate basta chiamare la stessa cosa nel sistema operativo. Questa potrebbe essere una restrizione del tuo sistema operativo, non di Java. –

+1

Dovresti metterlo come risposta @PeterLawrey – Fildor

risposta

16

"La semantica del socket richiede che un'applicazione imposti l'opzione SO_BROADCAST prima di tentare di inviare un datagramma a un indirizzo di base o broadcast, in modo da proteggere l'applicazione dall'invio accidentale di un datagramma a molti sistemi."

Source

+0

grazie mille. Immagino che questo valga anche per Linux e Windows – henryyao

+0

link di origine non funzionante :( –

+0

L'ho risolto ora. –

2

Nella maggior parte dei casi queste chiamate chiamano la stessa cosa nel sistema operativo. Questa potrebbe essere una restrizione del tuo sistema operativo, non di Java.

+0

ok, ma un'ulteriore domanda è perché Linux ha bisogno di farlo? la stessa cosa sembra essere usata anche in Windows – henryyao

Problemi correlati