2013-04-24 11 views
8

La mia applicazione Java dovrebbe controllare un dispositivo esterno (tecnologia EtherCAT Bus) direttamente connesso all'interfaccia di rete del mio computer (Ubuntu e Windows). Nessun altro dispositivo di rete è connesso. La comunicazione è stata effettuata su frame IEEE 802.3 Ethernet standard senza stack IP.Come inviare frame Ethernet in Java senza stack TCP/IP

Esempio per l'invio di dati:

int etherType = 0x88A4; // the EtherType registered by IEEE 
byte[] macBroadcast = new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 
byte[] macSource = new byte[] ... ; // MAC Address of my network interface card 
byte[] buffer = ... // the data to send 

device.write(macSource, macBroadcast, etherType, buffer); 

ho cercato JNetPcap, che utilizza il pcap libreria nativa. L'API fornita andava bene, ma c'erano problemi di multithreading su carichi pesanti, che mi hanno costretto a rinunciare.

netty.io era anche un candidato. Non sono sicuro, ma uno stack TCP/IP è obbligatorio. Ho ragione?

Ci sono altre idee per comunicare con frame Ethernet di basso livello? Preferirei una libreria java pura come netty.io, se ne esiste una.

Naturalmente anche JNA/JNI è un'opzione. Ma non voglio scrivere codice C.

Altre alternative?

+0

Hai trovato qualche soluzione? – arrowman

risposta

3

Queste sono le opzioni sono riuscito a trovare:

Ho visto anche i commenti secondo cui jNetPcap dovrebbe essere thread-safe ma che in pratica non lo è; Ad esempio, è difettoso se utilizzato con più thread.