2012-08-16 21 views
6

Estoy tratando de utilizar núcleo de Java para leer datos de la solicitud HTTP desde un InputStream, usando el siguiente código:Lectura contenido de la petición desde Java InputStream zócalo, siempre se bloquea después de cabecera

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) 
       System.out.println(inputLine); 
      in.close(); 

recibo el bien de cabecera, pero entonces el cliente simplemente se cuelga para siempre porque el servidor nunca encuentra "EOF" de la solicitud. ¿Cómo manejo esto? He visto esta pregunta bastante, y la mayoría de las soluciones implican algo como lo anterior, sin embargo, no funciona para mí. He intentado usar tanto rizo y un navegador web como cliente, simplemente enviar una petición GET

Gracias por cualquier idea

solicitud
+1

Dónde está colgando su código? ¿'readLine()' no está volviendo? –

+0

Sí, simplemente se está atascado en readLine() cuando lo paso en un depurador – Hoofamon

Respuesta

10

Un HTTP termina con una línea en blanco (opcionalmente seguido de datos de la solicitud como los datos del formulario o una carga de archivo), no un EOF. ¿Quieres algo como esto:

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
String inputLine; 
while (!(inputLine = in.readLine()).equals("")) 
    System.out.println(inputLine); 
in.close(); 
+0

¡¡Funciona perfecto, gracias !!! – Hoofamon

+0

estado buscando esta solución todo el día. funciona como un encanto – sunrize920

+0

¡Impresionante, gracias! – tokudu

3

Además de la respuesta anterior (ya que no soy capaz de publicar comentarios todavía), me gustaría añadir que algunos navegadores como Opera (supongo que fue lo que lo hizo , o fue mi configuración ssl, no sé) enviar un EOF. Incluso si no es el caso, le gustaría evitar eso para que su servidor no se bloquee debido a una NullPointerException.

Para evitar esto, sólo tiene que añadir la prueba nula a su condición, como esto:

while ((inputLine = in.readLine()) != null && !inputLine.equals("")); 
Cuestiones relacionadas