# [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben



## Volrath1987 (27. Apr 2010)

Hallo

im Rahmen meiner Abschlussarbeit soll ich eine Client Server Anwendung schreiben die XML-File vom Server (Desktop) auf den Client (Handy) über Bluetooth schickt und dort weiter verarbeitet wird.

Der Client empfängt die XML-Files nur teilweise oder kann die einfach nicht intepretieren. Caste ich die Bytes zu char werden im unteren Block eine Reihe von vier eckigen Zeichen angezeigt. Diese sehen ungefähr so aus [][][] ....

Worauf deutet das hin? Sind es leere ByteArrays? Leider bin ich jetzt grade nicht auf der Arbeit um an den Code zu kommen. Jedenfalls läuft die Kommunikation zwischen Client und Server über InputStream , OutputStream. DataInput und DataOutput sind auch möglich allerdings benutzte ich die ersteren beiden.

Über Code würde ich mich freuen

Gruß
Volrath


----------



## Murray (28. Apr 2010)

Volrath1987 hat gesagt.:


> Caste ich die Bytes zu char


Das ist keine gute Idee - chars sind ja Unicode-Zeichen, die sich nicht notwendigerweise mit einem Byte abbilden lassen. Daher kommt bei der Umwandlung immer ein Encoding ins Spiel.

Du musst dich entscheiden, ob du byte-orientiert (mit InputStream und OutputStream) oder zeichenorientuert ( mit Reader und Writer) arbeiten willst; wenn man beides mischt, hat man sich spätenstens dann mit Schwierigkeiten herumzuschlagen, wenn irgendwelche Sonderzeichen ins Spiel kommen.


----------



## Volrath1987 (28. Apr 2010)

hmm ok 

allerdings müsste dann nur bestimmte Zeichen nicht richtig angezeigt werden bei mir ist das so dass der obere Block der XML Datei korrekt aber der untere Block komplett mit [] dargestellt wird.

Kann es sein dass der OutputStream nicht mit dem schreiben ganz fertig ist wenn der Inputstream anfängt zu lesen ?

Das ganze läuft ca. so ab:


```
class Server{
  
   public void send(int length,byte[] element){
      StreamConnection con = //Connect .... 

     OutputStream os = con.getOutputStream();
     os.write(length);
     os.write(element);
     os.flush();
     os.close();
  }
}
```


```
// Im Thread
class Client{
  
  public void openAndWait(){
    StreamConnectionNotifier con= // Open a Connection and wait for incomming Connections. This Methode blocks until someone           c                                                                                                                              connect
  //someone connect
    InputStream is = con.getInputStream();
    int len = is.read();
    byte[] element = new byte[len]
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    for(int i=0;i<len;i++){
       baos.write(is.read));
    }
    element = baos.toByteArray();
    InputStream is2 = new ByteArrayInputStream(element);

    // Gebe is2 an den XML Parser weiter
  }
}
```

Der Parser parst nun ungefähr wie folgt 
<
  <blabla>asd<asd>

  .......
  .......

[][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][]
   .......
    ......



Wie gesagt der obere Block ist ganz richtig aber der untere nicht. 
An den richtigen Code komm ich grade nicht ran aber das sollte ungefähr das gleiche sein


----------

