PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Int-Wert schreiben, der von einem C-Programm gelesen wird



Demonus
14-03-2003, 08:24
Hey,
ich habe einen Server in C geschrieben der mit der Funktion read()
einen Int-Wert einliest. Der Client ist ein Java-Programm und jetzt
habe ich das Problem, dass ich keine Möglichkeit habe (weiss) wie ich
in Java einen Int-Wert zum Server schicken kann und der ihn auch richtig
empfängt.
Folgendes habe ich schon probiert:

1.
Klasse: DataOutputStream
Methode: writeInt()
Problem: diese Methode schreibt dass höchste Byte zuerst. Das hat zur
Folge, dass wenn ich die Zahl 3 schicke, der C-Server die Zahl
50331648 einliest. Das ist ja auch klar, weil die Byte Reihenfolge
ja anders ist (writeInt() schreibt ja das höchste Byte zuerst).

2.
Klasse: ObjectOutputStream
Methode: writeInt()
Problem: eigentlich müssten doch bei dieser Methode nur 4 Byte verschickt
werden, oder. Es kommen aber mehr als 4 Byte beim Server an und
daher ist der Wert wieder falsch.

Gibt es überhaupt ein Möglichkeit in Java, eine Int-Zahl zu verschicken
(schreiben), die von einem C-Programm gelesen werden kann?

anda_skoa
14-03-2003, 08:42
Original geschrieben von Demonus

1.
Klasse: DataOutputStream
Methode: writeInt()
Problem: diese Methode schreibt dass höchste Byte zuerst. Das hat zur
Folge, dass wenn ich die Zahl 3 schicke, der C-Server die Zahl
50331648 einliest. Das ist ja auch klar, weil die Byte Reihenfolge
ja anders ist (writeInt() schreibt ja das höchste Byte zuerst).


Java arbeitet mit Big Endian.
Wenn du auf einer Maschine mit Little Endian bist, zb i386, dann passt das nicht zusammen.

Du kannst auf einer der beiden Seiten das byte Array der Zahl entsprechend manipulieren.

Ich glaub am Netz ist normalerweie Big Endian.
Probier mal in C die Funktionen htonl bzw ntohl
Um vom Host in Network Byteorder bzw umgekehrt zu kommen.



2.
Klasse: ObjectOutputStream
Methode: writeInt()
Problem: eigentlich müssten doch bei dieser Methode nur 4 Byte verschickt
werden, oder. Es kommen aber mehr als 4 Byte beim Server an und
daher ist der Wert wieder falsch.


Der ObjectStream arbeitet mit Java Objects.
D.h. es muss auch den Namen der Klasse und andere Sachen mit übertragen.



Gibt es überhaupt ein Möglichkeit in Java, eine Int-Zahl zu verschicken
(schreiben), die von einem C-Programm gelesen werden kann?

Wie gesagt ist es ein Problem der unterschiedlichen Byteorder der beiden Maschinen, nicht von Java und C.

Ciao,
_

Demonus
14-03-2003, 20:46
Danke,
mit ntohl() und DataOutputStream gehts jetzt.