2012-05-22 12 views
7

Estoy usando la clase HttpURLConnection para hacer solicitudes http. Mi código se ve algo como esto:HttpURLConnection.getInputStream() bloques

while(true){ 
    try{ 
     connection=(HttpURLConnection)url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setConnectTimeout(2*1000); 
     InputStream in=connection.getInputStream(); 
    } 
    catch(SocketTimeOutException e){} 
    catch(IOException e){} 
} 

hago algún tipo de procesamiento de los datos una vez que recuperar el objeto InputStream. Mi problema es que si dejo que el programa se ejecute lo suficiente, la llamada a getInputStream se bloquea y nunca lo supero.

¿Me falta algo? Cualquier puntero o ayuda sería muy apreciada. Gracias.

+4

Nunca haga este tipo de cosas 'catch (SocketTimeOutException e) {}' en un bucle 'while (true)'. Hará que sea muy difícil depurar o detener su programa correctamente. – artbristol

+2

@artbristol qué estás tratando de decir ... eso es de nuestro código de producción :) –

+2

Además de hacer como @artbristol dice que has intentado comentar el 'connection.setDoOutput (true)' ya que esto significa que está esperando que llames 'connection.getOutputStream()' y escribir algo en el cuerpo de Http –

Respuesta

6

Configure el tiempo de espera de lectura para la conexión. Además, cierre las transmisiones en un bloque final una vez que haya terminado con ellas.

+0

Gracias. Esto ayuda mucho y también funciona. – Sandman

+0

muchas gracias por eso !!!! – jaisonDavis

1

Debe cerrar las conexiones que no se utilizan. Aquí está el ejemplo:

connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setReadTimeout(2*1000); 
connection.connect(); 
reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
stringBuilder = new StringBuilder(); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
stringBuilder.append(line + "\n"); 
} 
String result = stringBuilder.toString(); 
reader.close(); 
+0

Muchas gracias por su respuesta. ¡Configurar un tiempo de lectura en la conexión parecía arreglarlo! Agradecemos enormemente tu ayuda. – Sandman

+0

GET con setDoOutput (verdadero) no funciona bien juntos. – zgulser