2012-02-06 24 views
8

Tôi đang làm việc trên một ứng dụng có giao diện web Java được lưu trữ trên máy chủ Glassfish và hạt nhân C được triển khai dưới dạng trình nền Linux.Java <-> C Cầu

Vấn đề lớn nhất của tôi hiện giờ là cách thực hiện cuộc gọi thủ tục từ xa. Tôi cần gọi hàm và phương thức theo cả hai hướng. Đây là các giải pháp khả thi mà tôi có thể nghĩ đến:

  1. Sử dụng Java Native Interface và ổ cắm mạng để triển khai RPC.
  2. dbus - như xa như tôi biết dbus có thể được sử dụng cho RPC giữa Java và C.

Tôi muốn sử dụng cách cơ bản nhất mà không sử dụng thư viện bên ngoài hoặc các khuôn khổ. Có thể trực tiếp gọi các hàm/phương thức giữa Java và C bằng cách sử dụng các ổ cắm không? Hệ điều hành mà tôi sử dụng là Centos.

Có cách nào thanh lịch hơn để kết nối hai ngôn ngữ không?

Trả lời

8

Không có thư viện bên ngoài, chỉ còn lại ổ cắm. Nhưng tôi sẽ phân loại DBus như một thư viện bên ngoài, phải không?

Nếu chương trình C có thể sử dụng ổ cắm, không cần giao diện Java Native Interface. Mã Java có thể open sockets from Java, gọi các ổ cắm mã C nghe.

Nếu bạn cho phép DBus, có thể bạn nên xem xét rất nhiều giao thức mạng và RPC có thư viện cho cả C và Java. (Một lần nữa, không cần phải sử dụng JNI.)

Đi theo cách DBus, xem Java documentationtutorial.

+0

Bạn có cung cấp thêm một số thông tin về cách thực hiện điều này không? –

+2

@ user1103606 Đây là một chủ đề khá tiên tiến, do đó khó có thể đưa ra câu trả lời đơn giản cho vấn đề này. Bạn có biết cách viết các kết nối TCP và các phương thức gọi (ví dụ: sử dụng sự phản chiếu?) –

+0

Tôi có kiến ​​thức về cách viết chương trình máy chủ mạng và chương trình khách. Bạn có giải thích cách gọi các phương thức C từ java chỉ bằng cách sử dụng các ổ cắm không? Sự phản chiếu là gì? –

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