C# equivalent zu Javas ByteBuffer putInt(int)

Danny125

Grünschnabel
Hallo,

ich habe einen Java NIO Server, dieser erwartet am anfang des Datenpaketes immer ein Integer (4 byte) welches die Länge des Pakets angibt.

In einem Java Client habe ich die Kommunikation so realisiert:

Code:
cb.clear();
bb.clear();
cb.append("Hallo Welt :)");
cb.flip();
bb.putInt(cb.remaining()); // <---
encoder.encode(cb, bb, true);
bb.flip();
sc.write(bb);

cb = java.nio CharBuffer
bb = java.nio ByteBuffer
encoder = CharsetEncoder

Das ganze klappt wunderbar der Server bekommt Hallo Welt und gibt es aus.

Nun hab ich versucht einen C# Client zu erstellen und zwar mit diesem Code:
Code:
TcpClient client = new TcpClient();
client.Connect("localhost", 1234);
NetworkStream stream = client.GetStream();

string message = "Hallo Welt";
MemoryStream meoryStream = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(meoryStream))
{
  Encoding ascii = Encoding.ASCII;
  writer.Write(message.Length);
  writer.Write(ascii.GetBytes(message));
}
byte[] data = meoryStream.ToArray();
stream.Write(data, 0, data.Length);

Hier bekommt mein Java Server zwar auch "Hallo Welt", erwartet aber noch ~ 167772150 bytes mehr.

Der Schluss zu dem ich gekommen bin ist, dass etwas mit der Zahl am Anfang des Pakets nicht stimmen kann, aber ich weiss nicht was :(

Ich hoffe mir kann jemand helfen!!

Der Server extrahiert die Zahl mit
Code:
bytesToRead = bb.getInt();
bb = java.nio ByteBuffer

mfg
 
Vielleicht stimmt die ByteOrder beim Integer nicht.
MSDN sagt mir, dass Integers im Little Endian-Format gespeichert werden. Macht Java das auch so?
Vergleiche mal die Bytes, die den Integer repräsentieren sollen. Stimmen diese Bytes in C# und Java überein?
 

Neue Beiträge

Zurück