2013-04-24 1 views
8

Meine Java-Anwendung sollte ein externes Gerät (EtherCAT-Bus-Technologie) steuern, das direkt mit der Netzwerkschnittstelle meines Computers (Ubuntu und Windows) verbunden ist. Keine anderen Netzwerkgeräte sind angeschlossen. Die Kommunikation muss auf Standard IEEE 802.3 Ethernet Frames ohne IP-Stack erfolgen.So senden Sie Ethernet-Frames in Java ohne TCP/IP Stack

Beispiel für das Senden von Daten:

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

Ich versuchte JNetPcap, die die pcap native Bibliothek verwendet. Die angegebene API war in Ordnung, aber es gab Multithreading-Probleme bei hoher Last, was mich dazu zwang, aufzugeben.

netty.io war auch ein Kandidat. Ich bin mir nicht sicher, aber ein TCP/IP-Stack ist obligatorisch. Habe ich recht?

Gibt es andere Ideen für die Kommunikation mit Low-Level-Ethernet-Frames? Ich würde eine reine Java-Bibliothek wie netty.io bevorzugen, falls eine existiert.

Natürlich ist JNA/JNI auch eine Option. Aber ich möchte keinen C-Code schreiben.

Andere Alternativen?

+0

Haben Sie eine Lösung gefunden? – arrowman

Antwort

3

Dies sind die Optionen, die ich war in der Lage zu finden:

Ich habe auch Kommentare der Wirkung gesehen, dass jNetPcap sein soll thread-sicher, aber in der Praxis ist es nicht; d.h. es ist fehlerhaft, wenn es mit mehreren Threads verwendet wird.