PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [JAVA] Ende eines HTTP-Streams.


Gast
2010-03-02, 16:20:53
Hallo,
ich beginne gleich mal mit dem bsp:

ServerSocket ss = new ServerSocket(1337);
Socket s = ss.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while ((line = in.readLine()) != null && !line.equals("\r\n\r\n")) {
System.out.println(line);
}
System.out.println("done");

Dieses Programm bleibt immer in der while-schleife hängen. Warum, bzw. wie erkenne ich das Ende des Streams?

Gleich vorweg:
Mit \r\n\r\n endet der Stream nicht, dass habe ich schon probiert.
Content-Length wird leider nicht immer gesendet, deshalb kann ich es nicht abgragen...

Tiamat
2010-03-02, 20:08:41
Ich kann dir auch sagen warum.
Du beziehst einmal den InputStream und fragst ihn dann endlos ab.
Der Teil muss mit in die Schleife.
2. Bevor der String in den OutputStream geschoben wird, würde
String a = "\r\n\r\n" und String b = "\r\n\r\n" bei einem Vergleich
natürlich true ergeben. Das Problem ist, dass deine Nachricht
bereits im Outputstream versendet wurde und diese EscapeSequenz dann bereits einen bzw. zwei
Zeilenumbrüche bewirkt haben.

Beispiel : Stell dir vor du schreibst in eine Datei lokal auf dem Rechner mit nem OutputStream. Dann bewirkt \r\n an der gewünschten Stelle einen Zeilenumbruch.
Liest du die Datei jetzt aber mit nem InputStream ein, dann ist dort kein \r\n mehr zu finden und genau so ist das hier auch.

Da musst du dir was anderes einfallen lassen.

Gruß
Tiamat

Coda
2010-03-02, 20:35:34
EOF normal.