2010-12-17 22 views
5

En mi solicitud de código que escribí para la conexión a la URL, como a continuaciónjava.net.socketexception: ¿se ha agotado el tiempo de espera de la operación en android?

InputStream inputStream = new URL(url).openStream();  

tengo el error.Iam enviar mi Logcat

12-17 15:06:55.065: WARN/System.err(4952): java.net.SocketException: The operation timed out 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocketImpl(Native Method) 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem.java:115) 
12-17 15:06:55.065: WARN/System.err(4952):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:244) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533) 
12-17 15:06:55.075: WARN/System.err(4952):  at java.net.Socket.connect(Socket.java:1055) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88) 
12-17 15:06:55.075: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHTTPConnection(HttpURLConnectionImpl.java:927) 
12-17 15:06:55.085: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:909) 
12-17 15:06:55.085: WARN/System.err(4952):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1152) 
12-17 15:06:55.085: WARN/System.err(4952):  at java.net.URL.openStream(URL.java:653) 

¿Cómo resolver este problema

+0

¿cuál es la URL? ¿Estás seguro de que tu servidor está funcionando? –

+0

es el servidor accesible y acepta conexiones? – mad

+0

sí, mi servidor está activo y este error viene solo algunas veces – ADIT

Respuesta

13

Esto está sucediendo porque algunas veces su servidor tarda demasiado en responder. En realidad, esto también podría ocurrir debido a una red lenta, por lo que no tienes control total sobre ella. Si estaba utilizando HttpClient, se podría aumentar el tiempo de espera:

HttpParams httpParameters = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); 
HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT); 
HttpConnectionParams.setTcpNoDelay(httpParameters, true); 

client = new DefaultHttpClient(httpParameters); 

CONNECTION_TIMEOUT es el tiempo de espera para una conexión de establecer. WAIT_RESPONSE_TIMEOUT es el momento de esperar a que se reciban los datos; en este caso, esto es lo que necesita aumentar.

En pocas palabras:

  • Detener el uso de URL y comenzar a usar HttpClient ahora.
  • La situación que está describiendo es muy común en una aplicación de producción y necesita atenderla. Aumentar el tiempo de espera no siempre ayudará, ya que su aplicación parecerá detenerse cuando haya una red lenta. Puede agregar un mecanismo de reintento o informar al usuario que la solicitud falló y pedirle que lo intente nuevamente.
0

Además, tuve el caso de que está pasando una URL incorrecta, y la aplicación está buscando recuperar los datos, pero nunca los encuentra. Verifique su url, tal vez si lo corrige, solo en caso de que sea incorrecto, entonces la solicitud no le arrojará ese error.

Cuestiones relacionadas