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

Мое приложение Java должно управлять внешним устройством (технология шины EtherCAT), напрямую подключенным к сетевому интерфейсу моего компьютера (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.

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


person user1350889    schedule 24.04.2013    source источник
comment
Вы нашли какое-нибудь решение?   -  person arrowman    schedule 10.03.2017


Ответы (1)


Вот варианты, которые мне удалось найти:

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

person Stephen C    schedule 24.04.2013