hasNext() gibt immer true zurück (InputStream ist eine HTTP-Request)

Hallo an alle.

ich habe folgendes Problem:
Ich programmiere gerade ein Stück Software, dass ein HTTP-Request von einem Browser empfangen soll und dieses dann in der Konsole ausgibt.
Das ganze realisiere ich mit einem ServerSocket:

ServerSocket serv = new ServerSocket(90);
Socket socket = serv.accept();
Scanner scan = new Scanner(socket.getInputStream());

Um jetzt die einzelnen Wörter auszulesen benutze ich eine while-Schleife:

while (scan.hasNext()){...}

Problem ist nun, dass hasNext() immer true liefert, auch wenn der Request schon vollständig eingelesen ist (könnte mit der Persistenz von HTTP zusammenhängen???). Wie kann ich dieses Problem lösen, so dass ich auch mehrere Requests zügig nacheinander verabeiten kann, also ohne timeouts.

Vielen Dank und bis bald.

Hallo,

Um jetzt die einzelnen Wörter auszulesen benutze ich eine
while-Schleife:

while (scan.hasNext()){…}

Aus den JavaDocs: This method may block while waiting for input to scan.

Quick & Dirty Alternative mit Reader:

InputStream is = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine()) != null) {

 System.out.println(line);
 if(line.isEmpty()) {
 break;
 } 
}

HTH
Heavy

http://docs.oracle.com/javase/7/docs/api/java/util/S…