Как отправлять Ethernet-кадры в Java без стека TCP/IP

Мое Java-приложение должно управлять внешним устройством (технология EtherCAT Bus), напрямую подключенным к сетевому интерфейсу моего компьютера (Ubuntu и Windows). Другие сетевые устройства не подключены. Связь осуществляется по стандартным Ethernet-фреймам IEEE 802.3 без стека IP.

Пример для отправки данных:

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

Я попробовал JNetPcap, который использует нативную библиотеку pcap. Данный API был в порядке, но были проблемы с многопоточностью при большой нагрузке, что заставило меня отказаться.

netty.io также был кандидатом. Я не уверен, но стек TCP/IP является обязательным. Я прав?

Есть ли другие идеи для связи с низкоуровневыми Ethernet-фреймами? Я бы предпочел чистую библиотеку Java, такую ​​как netty.io, если таковая существует.

Конечно, JNA/JNI тоже вариант. Но я не хочу писать C-код.

Другие альтернативы?

1 ответ

Вот варианты, которые я смог найти:

Я также видел комментарии о том, что jNetPcap должен быть потокобезопасным, но на практике это не так; то есть он глючит при использовании с несколькими потоками.

Другие вопросы по тегам