2013-04-24 20 views
8

Moja aplikacja Java powinna sterować zewnętrznym urządzeniem (technologia EtherCAT Bus) bezpośrednio podłączonym do interfejsu sieciowego mojego komputera (Ubuntu i Windows). Żadne inne urządzenia sieciowe nie są podłączone. Komunikacja musi odbywać się na standardowych ramkach Ethernet IEEE 802.3 bez stosu IP.Jak wysyłać ramki Ethernet w Javie bez stosu TCP/IP

przykład do wysyłania danych:

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); 

Próbowałem JNetPcap, która korzysta z pcap natywne biblioteki. Podany interfejs API był w porządku, ale przy dużym obciążeniu były wielowątkowe problemy, które zmusiły mnie do rezygnacji.

netty.io również był kandydatem. Nie jestem pewien, ale stos TCP/IP jest obowiązkowy. Czy mam rację?

Czy istnieją inne pomysły na komunikację z niskopoziomowymi ramkami Ethernet? Wolałbym czystą bibliotekę Java, taką jak netty.io, jeśli taka istnieje.

Oczywiście JNA/JNI jest również opcją. Ale nie chcę pisać kodu C.

Inne alternatywy?

+0

Czy znalazłeś jakieś rozwiązanie? – arrowman

Odpowiedz

3

Są to opcje udało mi się znaleźć:

Ja również widziałem komentarze do skutku że jNetPcap ma być wątkowo bezpieczne, ale w praktyce tak nie jest; to jest błędne, gdy jest używane z wieloma wątkami.