Kommunikation auf Byte-Ebene zw. C und Java via Socket



  • Hallo,

    ich muss einen Treiberwrapper fuer eine Interfacekarte schreiben der den C-Treiber auf Java adaptiert.
    Fuer die initiellen Einstellungen verwende ich JNI. Fuer die Rohdaten will ich Sockets einsetzen und das ganze somit evtl sogar noch netzwerkfaehig machen.

    Sockets habe ich deshalb gewaehlt weil hier direkt und ohne Umwege kommuniziert wird. Beim Transfer kommt es auf sehr exaktes Timing und Geschwindigkeit an. Da gehen schon Megabyteweise Daten durch.

    auf der C Seite kommen beim Treiber Messages an die aus mehreren Informationen bestehen die in einzelnen Variablen verpackt sind. IDs, Roh-Daten und noch ein paar Parameter.

    Sagen wir eine Message besteht aus 2 Ints, 1 String und einem Byte-Array. Dies Daten muessen auf der C-Seite in den Socket rein und auf der Java-Seite aus einem Bytestream oder sowas wieder raus.

    Auf beiden Seiten laufen je 2 Threads die die Daten entgegennehmen und weiterschicken. Also ein Thread fuer TX und einer fuer RX.

    Habe schon herumexperimentiert ud auf C Seite (bin noch nciht so gut in C)einzeln Bytes in den Socket gesteckt und auf Java-Seite mit DataInput/OutputStreams versucht zu lesen und zurueck zu schreiben, aber dabei kam immer, egal wie ich es angestellt habe Muell dabei heraus.
    Habe in verschiedenen voren indirekt gelesen dass sowas in der Art schon vermehrt gemacht wurde... Weiss jemand wo ich einen Beispielcode herbekomme oder hat jemand sonst irgendwelche Tipps fuer mich?

    Gruss
    Alex



  • http://beej.us/guide/bgnet/output/html/index.html
    http://www.uvomatik.de/programmierung/
    http://man.linuxquestions.org/
    http://www.freebsd.org/cgi/man.cgi
    zum stoebern...

    hast du konkret probleme mit dem versenden der daten?
    es waere fuer dich effizienter, wenn du alle daten eines "pakets" sammelst, bevor du sie uebertraegst, wenn du das noch nicht so machst.



  • ich bin bis jetzt noch im "experimentier"-Stadium... Versuche bis jetzt gezielt in C irgendwelche Daten zu fuettern und diese in JAVA wieder auszulesen... Wenn das klappt bin ich schonmal weit...

    Konkrete Probleme mit dem versenden von Daten ? Hmm, gute Frage. Sagen wir es so:

    Ich hab einen Java-Server der alles was kommt als Byte entgegen nimmt, dieses auf der Console ausgibt un wieder 1:1 in den Socket zurueckscheibt... Sprich ein Mini-Echo-Server der Byteweise arbeitet.

    Fuer C hab ich im Netz verschiendene Quellcodes fuer Programme gefunden die ueber Socket kommunizieren. Aber keines ist in der Lage ein "a" durch die Leitung zu schicken so dass Java es als "a" erkennt, als "a" ausgiebt und als "a" wieder zuruecksendet so dass es in C wieder als "a" angezeigt wird. abe auf C und Java-Seite shcon etliche Kombinationen ausprobiert. Jedoch immer ohne erfolg.

    Die im endeffekt zu uebermittelnde Nachricht besteht im uebrigen nur auf wenigen Bytes (ist eine CAN-Bus-Message)...

    Danke fuer die Links, ich schaus mir an.

    Gruss Alex



  • du musst dich mit der sockets api auseinandersetzen, wenn du was schaffen willst. beispielprogramme sind ja schoen und gut, aber allein davon lernt man nix. guck dir die ersten beiden links aus meinem letzten post an. das sind tutorials. die letzten beiden links sind manpages-portale, mit denen du eine gute befehlsreferenz hast.

    du weisst, was nullterminierte strings sind, wieso man strings nicht mit "==" vergleichen kann und dass in c gilt "A" != 'A' == 65?



  • c.rackwitz schrieb:

    du musst dich mit der sockets api auseinandersetzen, wenn du was schaffen willst. beispielprogramme sind ja schoen und gut, aber allein davon lernt man nix. guck dir die ersten beiden links aus meinem letzten post an. das sind tutorials. die letzten beiden links sind manpages-portale, mit denen du eine gute befehlsreferenz hast.

    du weisst, was nullterminierte strings sind, wieso man strings nicht mit "==" vergleichen kann und dass in c gilt "A" != 'A' == 65?

    Alles klar, ich acker mich da mal durch...

    nullterminierte String ...hmm, sagt mir grad nix, das mit dem vergleichen is klar, ebenso "A" != 'A' == 65 ... N bisschen was hab ich aus meinen fast 2 Jahren Java schon mitgenommen... Arbeite erst seit knapp 3 Monaten mit C...

    Aber wie heisst's so schoen: Learning by doing..

    - Alex



  • alex0801 schrieb:

    [nullterminierte String ...hmm, sagt mir grad nix

    Strings in C sind nur char-arrays, und damit man weiß, wann sie aufhören und nicht über die array-Grenze drüberrödelt, werden Sie mit einem '\0' terminiert.

    char str[] = "Hallo Welt\0";
    


  • Stimmt, jetzt daemmerts mir wieder... Hatte ich ja gelesen. Alles klar. Danke

    - Alex


Anmelden zum Antworten