# Socket und readLine()



## Mork (26. Feb 2008)

Hallo Zusammen,

über einen Socket kommt ein XML String, welchen ich serverseitig verarbeiten möchte. 


```
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String line = in.readLine();
			StringBuilder input = new StringBuilder();
			while (!(null == line)) {
				input.append(line);
				System.err.println(line);
				line = in.readLine();
			}
```

Nun ist aber das Problem, das von in.readLine() eine Exception geworfen wird, wenn der erwartete String leer ist oder wenn readLine auf die letzte Zeile + 1 trifft.

Wie kann man das umgehen? Also bereits wissen das der Stream leer ist oder zu Ende gelesen, bevor man (nochmal) readLine() darauf aufruft?

Vielen Dank schonmal


----------



## SlaterB (26. Feb 2008)

soweit ich weiß, kannst du nur bis zur Exception weiterlesen,
try/ catch drumherum, dann ist das ja relativ human in den Programmfluss eingebunden,

einzige Alternative: irgendwie wissen, dass der Server nix weiter schickt (z.B. aus der bisherigen Antwort)
und gar nicht erst weiter readLine() abfragen


----------



## Mork (26. Feb 2008)

Danke schonmal 

Problem ist bei der Exception, dass der Socket dann zu und ich keine Antwort mehr schicken kann.

Dann muss ich die bisherige Antwort auslesen und versuchen daraus Informationen zu gewinnen, obs zu Ende ist. Andere Möglichkeit seh ich auch nicht.

Außer wenn der geschicke String leer ist, dann kann ich den Client nicht informieren das der String leer war. Oder?


----------



## SlaterB (26. Feb 2008)

> Problem ist bei der Exception, dass der Socket dann zu und ich keine Antwort mehr schicken kann. 


nun, bleiben wir mal bei der Wahrheit:
nur wenn der Socket schon zu ist, bekommst du die Exception ,
ansonsten würde der read bis in alle Ewigkeit warten, was natürlich auch wenig erfreulich ist

> Außer wenn der geschicke String leer ist, dann kann ich den Client nicht informieren das der String leer war. Oder?

was meinst du jetzt, soll der Server den Client informieren?
gut, der Server kann den Client nicht informieren, ohne ihm eine Nachricht zu schicken 

oder meinst du von deinem Lesen beim Client aus zu einer weiteren Komponente im Client?
da kannst du doch null, "" oder sonstwas übergeben


----------



## Mork (26. Feb 2008)

Das ist eine interessante Frage, weil wenn der String leer ist, wird der Socket geschlossen und ich kann dem Client nicht mehr sagen, dass der String leer war. Und geschlossen ist der Socket nur, weil der String leer war


----------

