Hallo zusammen,
ich habe einen sehr simplen Web-Server, der lediglich einen Request entgegennimmt und diesen als Antwort an den Browser zurückschickt ("Echo").
Das macht er aber nur, wenn ich den Request explizit auf die Leerzeile im HTTP-GET abfrage. Falls die Abfrage auskommentiert wird (s. Quellcode Zeile 22), bleibt der Server in einer Endlosschleife, irgendwo in der Klasse BufferedReader, Methode readLine (genauer in der Methode fill()).
Sollte readLine nicht prinzipiell irgendwann vom Stream mit null zurückkehren, auch wenn ich die Leerzeile nicht explizit abfange?
ich habe einen sehr simplen Web-Server, der lediglich einen Request entgegennimmt und diesen als Antwort an den Browser zurückschickt ("Echo").
Das macht er aber nur, wenn ich den Request explizit auf die Leerzeile im HTTP-GET abfrage. Falls die Abfrage auskommentiert wird (s. Quellcode Zeile 22), bleibt der Server in einer Endlosschleife, irgendwo in der Klasse BufferedReader, Methode readLine (genauer in der Methode fill()).
Sollte readLine nicht prinzipiell irgendwann vom Stream mit null zurückkehren, auch wenn ich die Leerzeile nicht explizit abfange?
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class VerySimpleWebServer {
public static void main(String[] args) {
System.out.println("VerySimpleWebServer gestartet");
try {
ServerSocket server = new ServerSocket(8888);
Socket client = server.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
StringBuffer request = new StringBuffer();
while(true) {
String line = br.readLine();
System.out.println(line);
if(line != null) {
request.append(line+"\n");
if(line.length() <=0) break; // ohne bleibt der Server in Endlosschleife
} else
break;
}
System.out.println(request);
bw.write(request.toString());
bw.flush();
bw.close();
client.close();
server.close();
}
catch (Exception e) {
System.err.println("!"+e.toString());
e.printStackTrace();
}
System.out.println("VerySimpleWebServer beendet");
}
}
[/Java]