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
warum nicht das C programm als DLL machen und von java direkt ansprechen?
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?
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?
>> 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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.