Come eseguo alcune azioni nel mio programma Java ogni volta che viene visualizzata una particolare interfaccia di rete?

1

Volevo eseguire alcune azioni nel mio programma Java ogni volta che viene visualizzata una particolare interfaccia (interfaccia di rete ppp0, ad esempio). Tuttavia ho capito che era troppo maldestro continuare a interrogare l'interfaccia per verificarne lo stato.

Dopo aver trovato il file if-up.local in Linux, ora posso eseguire uno script bash ogni volta che viene visualizzata l'interfaccia. Funziona bene, tuttavia considerando il mio programma Java in esecuzione, come posso fare in modo che questo script interagisca con il mio codice Java?

Sto considerando le seguenti opzioni:

  1. Scrivi un socket di ascolto e da questo script invia un messaggio a questo socket Java.
  2. Invoca un programma in C e tramite JNI esegui il mio codice java.

Sto cercando un approccio intuitivo e meno dispendioso in termini di risorse.

    
posta gnat 16.03.2013 - 03:21
fonte

1 risposta

3

Probabilmente il modo più semplice è la tua prima opzione. Apri un socket TCP e inoltra una richiesta dallo script if-up.local che hai trovato. Usando wget / curl per esempio.

Un'alternativa più complessa è di utilizzare in qualche modo un netlink socket da java. Penso che NETLINK_ROUTE ti fornirà aggiornamenti sugli eventi di creazione dell'interfaccia, vedi il primo esempio in quel link.

Per questa seconda opzione, scrivi qualche JNI o prova a trovare una libreria java per usare i socket unix. In una rapida ricerca ho trovato questo , anche se non l'ho mai usato, quindi non so se sarebbe lavoro per le tue esigenze.

Una terza idea, simile alla prima, invece di un socket, usa un comando FIFO pipe ( mkfifo ), potresti leggerlo da java come un normale file e scrivici dallo script bash semplicemente con * echo > fifo_file *.

    
risposta data 16.03.2013 - 04:57
fonte

Leggi altre domande sui tag