while-Schleife / Abbruchbed. beim Einlesen eines Streams

Status
Nicht offen für weitere Antworten.

Johannes L.

Aktives Mitglied
Hallo,

ich lese von einem Client die HTTP-Request Header aus, aber ohne dass ich am Ende ein break; einfüge terminiert die Schleife nie:

Code:
from_client = new BufferedReader(new InputStreamReader(client.getInputStream()));

...

String header;

while ((header = from_client.readLine()) != null)
{
  // Process all headers until a blank new line gets read.
  if (!header.trim().equals(""))
  {
    ...
  }
  // Last header line which is empty (\r\n).
  else
  {
    logger.debug("Last Header line (\r\n)" + header);
    break;
  }
}

Sollte die Schleife nicht auch ohne den else-Block terminieren, wenn halt "null" gelesen wird, also das Ende des Headers?

Viele Grüße,
Johannes
 

anfänger15

Bekanntes Mitglied
Soweit ich weiß wartet readLine bis wieder eine Zeile gesendet wird und somit terminiert es nicht. Das passiert glaube ich erst wenn die Verbindung unterbrochen wird
 

HoaX

Top Contributor
der ende des headers ist erreicht wenn du eine leere ziele liest. das mit dem break is schon ok so. wenn du weiter liest bekommst du den request-body. aber auch der ist irgendwann zu ende. also es sollte schon mal ein ende finden, wenn auch nicht dann wenn du es dir wohl erhoffst.
 
G

Guest

Gast
HoaX hat gesagt.:
der ende des headers ist erreicht wenn du eine leere ziele liest. das mit dem break is schon ok so. wenn du weiter liest bekommst du den request-body. aber auch der ist irgendwann zu ende. also es sollte schon mal ein ende finden, wenn auch nicht dann wenn du es dir wohl erhoffst.

Naja, bei GET-Requests sollte nach

Code:
Last-Header-Name: value\r\n
\r\n

nichts mehr kommen, bei POST-Requests halt noch der urlencoded body, aber bei GET und HEAD sollte es das zumindest sein!?
 

kleiner_held

Top Contributor
Es gilt was anfänger15 geschrieben hat: nach dem Ende des Requests komm kein from_client.readLine() == null solange der Client seinen Output-Stream offen haelt und es ist bei HTTP-Clients (im Fachjargon auch Browser genannt :) ) nun mal ueblich, eine Verbindung nach einem Request offen zu halten und auch mehrere Requests ueber die gleiche Verbindung abzusetzen.
Deswegen ist muss die Schleife nach der Leerzeile notgedrungen mit break abgebrochen werden und dann kann man entscheiden, ob man noch einen Body auslesen muss oder nicht.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben