2013-04-24 24 views
8

Ứng dụng Java của tôi nên điều khiển thiết bị bên ngoài (công nghệ Bus EtherCAT) kết nối trực tiếp với giao diện mạng của máy tính (Ubuntu và Windows). Không có thiết bị mạng nào khác được kết nối. Việc truyền thông đã được thực hiện trên các khung Ethernet chuẩn IEEE 802.3 mà không có chồng IP.Cách gửi Ethernet-Frame trong Java mà không cần ngăn xếp TCP/IP

Ví dụ cho việc gửi dữ liệu:

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

tôi đã cố gắng JNetPcap, trong đó sử dụng các pcap thư viện bản xứ. API đã cho là tốt, nhưng có nhiều vấn đề đa luồng trên tải nặng, buộc tôi phải từ bỏ.

netty.io cũng là một ứng cử viên. Tôi không chắc chắn, nhưng một ngăn xếp TCP/IP là bắt buộc. Tôi có đúng không?

Có ý tưởng nào khác để giao tiếp với các khung Ethernet cấp thấp không? Tôi thích một thư viện java thuần túy như netty.io, nếu có.

Tất nhiên, JNA/JNI cũng là một tùy chọn. Nhưng tôi không muốn viết mã C.

Các lựa chọn thay thế khác?

+0

Bạn có tìm thấy giải pháp nào không? – arrowman

Trả lời

3

Đây là những lựa chọn tôi đã có thể tìm thấy:

Tôi cũng thấy ý kiến ​​để hiệu quả mà jNetPcap được coi là thread-safe nhưng trong thực tế nó không phải là; tức là nó bị lỗi khi được sử dụng với nhiều luồng.

Các vấn đề liên quan