# inputstream teilen?



## alibali (22. Jan 2008)

hi, ich versuche mich gerade an einem kleinen client/server testprogramm, und wollte bei einem bestimmten kommando gerne ein objekt vom server zum client schicken.

der server schickt dem client bei einem bestimmten ereignis ein objekt, da es nur eine socketverbindung gibt, und die eigentliche kommunikation über einen BufferedReader und einen PrintWriter läuft, muss der server dem client ja vor dem objekt noch mitteilen "achtung hier kommt jetz ein objekt!", gefolgt von dem eigentlichen objekt.

und ich glaube da liegt das problem begraben.

server: 


```
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "latin1"), true);
        oout = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
```

kann ich einfach ein outputstream für zwei verschiedene zwecke verwenden? einmal einen normalen text ausgeben, gefolgt von einem objekt?
denn der client muss dann ja einen BufferedReader und einen ObjectInputStream auf denselben inputstream legen, was scheinbar nicht ganz funktioniert, denn der ObjectInputStream wartet vergeblich auf den header vom ObjectOutputStream...

client: 


```
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  oin = new ObjectInputStream( new BufferedInputStream(socket.getInputStream()));
```

meine frage nun, wie kann ich das geschickt handlen, ohne einen zusätzlichen socket aufzumachen, geht immer nur eins von beidem und mein ansatz is total falsch?

ich hoffe ihr könnt mir helfen
danke


----------



## alibali (26. Jan 2008)

niemand eine idee?


----------



## anfänger15 (26. Jan 2008)

Meines Wissens kannst du die 2 Streams nicht gelichzeitig benutzen. Du musst also zuerst den text senden und dir dann nochmal einen outputStream holen in dem du das object sendest.

Bin mir aber auch nicht 100% sicher.


----------



## Guest (27. Jan 2008)

Doch man kann. 
Man muss auf die Reihenfolge achten, mit der die Streams erzeugt werden. 
Bei mir funzt folgendes Beispiel:

Serverseite:

```
this.din  = new DataInputStream(socket.geInutputStream());
this.oin = new ObjectInputStream(socket.getInutputStream());
      
this.dout = new DataOutputStream(socket.getOutputStream());
this.oout = new ObjectOutputStream(socket.getOutputStream());
```

Clientseite:

```
this.oout = new ObjectOutputStream(socket.getOutputStream());
this.dout = new DataOutputStream(socket.getOutputStream());

this.din  = new DataInputStream(socket.getInputStream());
this.oin = new ObjectInputStream(socket.getInputStream());
```

Allerdings funzt das (komischerweise) nicht wenn ich nen BufferedInput- bzw. Outputstream dazwischenschalte


----------



## tuxedo (28. Jan 2008)

Anonymous hat gesagt.:
			
		

> Doch man kann.



Sicher?

Zwei mal den InputStream "erzeugen" mag vielleicht klappen. Aber was ist mit den Daten? Du kannst ja nicht am InputStream (1) 5 bytes daten auslesen, und später die gleichen Daten an InputStream(2) erwarten...


Einen Fluss (mit Wasser und so) kann man auch nicht duplizieren und an zwei Stellen ein und denselbenm Fisch aus dem Wasser fischen. Streams verfolgen eigentlich dieses Fluss-Prinzip.

- Alex


----------

