# Reihenfolge getInputStream() und getOutputStream()



## Evolver (1. Mrz 2008)

Ich wollte mal wieder meine Netzwerkkenntnisse in Java ein bisschen auffrischen (lang lang ist's her) und bin auf folgendes Problem gestoßen: Wenn ich clientseitig ein Socket habe und mit _getInputStream()_ und _getOutputStream()_ mir die Streams zum Lesen und Schreiben zurückgeben lassen möchte, dann blockiert das Programm, wenn ich _getInputStream()_ vor _getOutputStream()_ aufrufe, nur anderes herum funktioniert es korrekt. Warum ist das so?


----------



## HoaX (1. Mrz 2008)

wäre mir neu -> zeig deinen code ....


----------



## Evolver (2. Mrz 2008)

OK, du hast Recht, das Problem schein nach intensiveren Test noch ein wenig komplexer zu sein. Also ich arbeite zum Senden und Empfangen der Daten mit _ObjectInputStream_ und _ObjectOutputStream_. Das Programm blockiert genau dann, wenn ich zuerst den _ObjectInputStream_ erzeuge.


```
// funktioniert
tOut = new ObjectOutputStream(tTransfer.getOutputStream());
tIn = new ObjectInputStream(tTransfer.getInputStream());


// fährt sich fest in beim Erzeugen des ObjectInputStream
tIn = new ObjectInputStream(tTransfer.getInputStream());
tOut = new ObjectOutputStream(tTransfer.getOutputStream());
```


----------



## Murray (2. Mrz 2008)

Noch etwas mehr Code, bitte - was ist tTransfer, und wie wird es erzeugt?


----------



## HoaX (3. Mrz 2008)

der objectInputStream liest im konstruktor daten vom stream, und da kommt wohl noch nix an. warum das in umgekehrter reihenfolge geht ist mir rätselhaft


----------



## tuxedo (3. Mrz 2008)

Du kannst nicht auf beiden Seiten zuerst einen InputStream erzeugen. 

Wenn du auf der einen Seite eien InputStream bastelst, musst du auf der anderen Seite zuerst einen OutputStream basteln. 

Bei den Object*Streams wird, bevor man sie verwenden kann, intern erst ein wenig kommuniziert und Headerdaten ausgetauscht. Und wenn beide zuerst auf den jeweils anderen warten (was bei zwei Inputstreams der Fall ist), dann warten sie sich zu tode. Und wenn zuerst zwei Outputstreams erzeugt werden, sendet eder seinen Header, aber kein Schwein kriegt das mit. Genauer hab ich mir's aber noch nicht angesehen. 


- Alex


----------



## Guest (3. Mrz 2008)

Danke für die kompetente Antwort.


----------

