ich einen Server schreibe, die HTTP-Anforderung empfängt (nur Methode GET als von der Schule Arbeit Teil der Vereinfachung)Warum scanner.hasNext() blockiert beim Lesen Http Anfrage
I Socket
Klasse verwendet, um die Verbindung ich dann zu bekommen verwendet InputStream
sowie Scanner
, um die HTTP-Anfrage zu lesen.
Allerdings, während ich die HTTP-Anfrage Header Zeile für Zeile mit hasNext()
lesen. Das Programm hängt bei hasNext()
und wartet auf weitere Eingaben, selbst wenn es alle Zeilen verbraucht hat.
Unten ist mein readRequest
Methode:
public void readRequest(Socket client) throws BadRequestException {
StringBuilder builder = new StringBuilder();
try {
Scanner sc = new Scanner(client.getInputStream());
sc.useDelimiter("\\r\\n");
while(sc.hasNext()){
builder.append(sc.next());
builder.append("\n");
}
parseRequestFromClient(builder.toString());
} catch (IOException e) {
throw new BadRequestException(e.getMessage());
}
Haben Sie Debugging versucht? – xenteros
Sind Sie sicher, dass Sie etwas in Ihrer Schleife lesen? Ich sehe keinen Teil, der tatsächlich Header zum Server sendet, über welche Art von Anfrage es ist (ist es GET oder vielleicht etwas anderes, welche Ressource genau wollen Sie vom Server bekommen). Ohne diesen Header Server kann einfach warten und Sie nichts senden, die 'hasNext()' enthalten kann. – Pshemo
@xenteros Ja, ich habe Eclipse zum Debuggen verwendet. Und es bleibt bei dieser 'while (sc.hasNext()) Zeile stehen. –