# problem beim schicken von XML-DAtenpacketen via TCP



## MontyBurns (11. Jul 2005)

hi

hab ein problem mit der netzwerkübertragung von daten.
ich baue eine tcp verbindung mit nem server auf und schicke daten in xml über einen outputStream.
das problem ist das der socket geschlossen wird, wenn ich nur den stream schließen will

```
Socket socket = new Socket("localhost",4322);
PrintWriter out = new PrintWriter(socket.getOutputStream());

// hier sende ich was über out

System.out.println("Testausgabe: Ist der Socket geschlossen? (1) " + socket.isClosed() ); //false

out.close();
           
System.out.println("Testausgabe: Ist der Socket geschlossen? (2) " + socket.isClosed() ); //true
           
socket.close();
```
den stream muss ich schließen damit der server sieht das nun alles übertragen ist
der socket muss aber offen bleiben weil ich später weitere daten übertragen möchte.

jetzt möchte ich wissen warum der socket durch die anweisung "out.close()" geschlossen wird?

oder mach ich was falsch, wenn ich den stream schließe?
wie kann ich sonst erreichen das der server merkt das nun ein DAtensatz übertragen ist

Danke für hilfe

Monty Burns


----------



## Nick H. (12. Jul 2005)

warum machst du nicht einfach ein neues Socket
wenns geschlossen wird machs halt wieder auf
wo liegts Problem?


----------



## Grizzly (12. Jul 2005)

Das Problem dürfte hier sein: Wenn Du denn OutputStream des Sockets schliesst, fängst Du ja nix mehr mit dem Socket an, oder? 

Zum Einen könnte das die Gegenstelle daran erkennen, dass das Root XML Element abgeschlossen wurden. Zum Anderen könntest Du auch eine Zeichenfolge bestimmen, die das Ende eines Datensatzes singalisiert.


----------



## Grizzly (15. Jul 2005)

Was mir auch noch gerade so eingefallen ist: Du kannst ja das XML Zeug in einen String stecken, schauen wie lang der ist und am Anfang die Länge senden. Die Gegenstelle muss dann nur immer die Länge auslesen, die der nächste String hat, und weiss dann, wann das XML Element zu Ende ist.


----------

