mikrocontroller.net

Forum: PC-Programmierung Java mit C-Programm kommunizieren


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

folgendes Problem habe ich: Es soll ein C-Programm über ein Java 
Programm gesteuert werden. Das Java-Programm soll im wesentlichen die 
graphische Benutzeroberfläche realisieren und das C-Programm die 
Algorithmik im Hintergrund.

Welches ist die beste Möglichkeit für die Kommunikation der beiden 
Programme?
Es gibt in Java die Möglichkeit, ein Kommandozeilenprogramm aus Java 
heraus zu starten und via I0-Stream mit dem Programm zu kommunizieren. 
Ich habe es ausprobiert, das Programm lies sich starten, die 
Kommunikation funktionierte aber nicht.

Als zweite Möglichkeit fällt mir die Kommunikation via UDP-Server ein. 
Welche Problem könnte es bei der Kommunikation über den Localhost geben? 
Sperrt die Windows-Firewall eventuell die Kommunikation? Ist die 
Geschwindigkeit zu niedrig ?

Vielen Dank für eure Erfahrungen,
Stefan

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum nicht das C programm als DLL machen und von java direkt 
ansprechen?

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ: JNI

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, danke für eure Vorschläge

>warum nicht das C programm als DLL machen und von java direkt
>ansprechen?
Als C-Compiler verwende ich den GCC. Wie ich gerade gesehen haben, kann 
man damit tatsächlich DLLs erstellen:

http://www.cygwin.com/cygwin/cygwin-ug-net/dll.html

> Alternativ: JNI

Wenn ich es richtig sehe, brauch ich JNI um die DLL in Java zu laden. 
Ich bin mir nicht sicher, wie ist es mit der Datenhaltung in der DLL 
selber?

Das 2te Problem ist die Plattformunabhängigkeit: Ich will das Ganze 
sowohl unter Linux als auch unter Windows laufen lassen können.
Hier scheint es eine Library für UDP-Sockets zu geben, die 
Plattformunabhängig ist:

http://cs.baylor.edu/~donahoo/practical/CSockets/practical/

Die Frage wäre, wie zuverlässig kann so was sein?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Link für das JNI-Example:
http://patriot.net/~tvalesky/jninative.html

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:
> Das 2te Problem ist die Plattformunabhängigkeit: Ich will das Ganze
> sowohl unter Linux als auch unter Windows laufen lassen können.
Du kannst die "DLL" sowohl für Win als auch für Linux kompilieren.

> Welche Problem könnte es bei der Kommunikation über den Localhost geben?
Über UDP vorallem das Pakete verloren gehen, Protokolloverhead, 
Serialisierung/Deserialisierung...

> Das 2te Problem ist die Plattformunabhängigkeit
Warum nicht einfach alles in Java schreiben?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Welche Problem könnte es bei der Kommunikation über den Localhost geben?
>Über UDP vorallem das Pakete verloren gehen, Protokolloverhead,
>Serialisierung/Deserialisierung...

Hmm, ja, da hast Du recht. Es hätte aber den Vorteil, dass man viele 
unabhängige Instanzen laufen lassen kann.

Ich habe gerade mal ein wenig mit dem JNI-Interface herumprobiert. Wow, 
was für ein kompliziertes fehleranfälliges Verfahren. Aus dem 
Zusammenfügen verschiedenster Information aus verschiedenen Websites ist 
es mir endlich gelungen, ein JNI Beispiel zu kompilieren.
Der wichtigste Hinweis war hier:
http://www.inonit.com/cygwin/jni/helloWorld/c.html

>> Das 2te Problem ist die Plattformunabhängigkeit
>Warum nicht einfach alles in Java schreiben?

Weil ich schon eine riesigen Batzen in C geschrieben habe. Ich schreibe 
einen Prozessoremulator und der ist in Java zu langsam. Außerdem ist der 
Byte-Typ in Java Mist für Bitmanipulationen. Da lobe ich mir die 
inttypes in C.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan schrieb:

> Ich habe gerade mal ein wenig mit dem JNI-Interface herumprobiert. Wow,
> was für ein kompliziertes fehleranfälliges Verfahren.
Also ich habe mit JNI schon ab und an mal gearbeitet, was ist daran 
fehleranfällig? C ist fehleranfällig, ja aber das wolltest du doch!

>>Warum nicht einfach alles in Java schreiben?
>
> Weil ich schon eine riesigen Batzen in C geschrieben habe.
Naja... Das eben in Java zu transformieren macht dadurch das du es 
später viel einfacher hast um ein vielfaches wieder wett.
> Ich schreibe einen Prozessoremulator und der ist in Java zu langsam.
Behaupte ich einfach mal das das so nicht stimmt. Hast du schon tests 
gemacht?
> Außerdem ist der Byte-Typ in Java Mist für Bitmanipulationen.
Wieso dass? das funktioniert einwandfrei. Wenn es dir um das vorzeichen 
geht must du halt auf char oder int gehen. Bitmanipulationen sind in 
Java (egal welcher Typ) genauso einfach wie in C oder jeder anderen 
Programmiersprache.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.