Reihenfolge getInputStream() und getOutputStream()

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
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?
 

Evolver

Bekanntes Mitglied
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.

Code:
// 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());
 

HoaX

Top Contributor
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
 
T

tuxedo

Gast
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
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben