tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
674
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Danny125 Danny125 ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    10
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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 :
    1
    
    bytesToRead = bb.getInt();
    bb = java.nio ByteBuffer

    mfg
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    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?
     

Ähnliche Themen

  1. 0 terminierten String aus ByteBuffer lesen
    Von FBIagent im Forum Java
    Antworten: 0
    Letzter Beitrag: 22.09.10, 22:32
  2. Websphere startup beans --> equivalent in JBOSS?
    Von ChrisJava im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 9
    Letzter Beitrag: 14.05.09, 11:32
  3. Javas Mikrochip Pizza. (CD Auswurf)
    Von Stigma im Forum Java
    Antworten: 4
    Letzter Beitrag: 06.12.07, 17:13
  4. Get / Set - Equivalent in Java wie in .NET ?
    Von MasterEvil im Forum Java
    Antworten: 2
    Letzter Beitrag: 05.12.05, 10:11
  5. Antworten: 1
    Letzter Beitrag: 18.01.05, 15:26