perdida net injector failed econnreset conexión android localhost socketexception peer

android - injector - java net socketexception recvfrom failed



Obteniendo "SocketException: Connection reset by peer" en Android (5)

Estaba Connection reset by peer una gran cantidad de Connection reset by peer cuando estaba visitando ciertas páginas web o descargando archivos (desde mi aplicación o desde el navegador de Android).

Resultó que era mi operador 3G el que bloqueaba las conexiones (por ejemplo, la descarga de un archivo .exe estaba prohibida).

¿Tienes el mismo problema en Wifi?

Mi aplicación necesita ponerse en contacto con el mismo dispositivo en el que está trabajando, a través de http://127.0.0.1/... (una url localhost).

Por alguna razón, aproximadamente el 50% de las veces (y quizás exactamente el 50%) cuando llego a un sitio web con contenido JSON, obtengo la excepción:

java.net.SocketException: recvfrom failed: ECONNRESET (Restablecimiento de conexión por pares)

Para el otro 50%, obtengo resultados perfectamente buenos. Intenté hacer encuestas (e incluso una gran demora entre las encuestas), pero sigo obteniendo los mismos resultados raros.

He buscado en Internet y también aquí, y no estoy seguro de por qué ocurre. ¿El par significa que el cliente lo ha causado? ¿Por qué ocurre y cómo debo manejarlo?

Algunos sitios web dicen que es algo común, pero no encontré qué es lo mejor que puedo hacer en esos casos.


Este es un hilo viejo que conozco. Pero esto podría ayudar a alguien.

En mi caso, este error fue causado por el servicio .NET WCF (soap). Uno de los objetos en el resultado de devolución tenía un DataMember con propiedad get {} pero sin set {}.

Para que se produzca la serialización, cada DataMember debe tener ambos disponibles {} y set {}. Implementé un conjunto vacío {} (vacío debido a mis reglas comerciales) y el problema fue resuelto.

My scenerio es una implementación específica de un servidor defectuoso, pero tal vez ayude a alguien a ahorrar tiempo al solucionar problemas.


Intente establecer esta propiedad para su HttpURLConnection antes de conectar:

conn.setRequestProperty("connection", "close");

Esto desactivará la propiedad " keep-alive " que está activada por defecto.


Ok, la respuesta fue que es culpa del servidor: tuvo que cerrar la conexión después de cada solicitud.

Puede ser que Android mantenga un grupo de conexiones y use el anterior o algo así.

De todos modos, ahora funciona.

EDITAR: de acuerdo con la API de HttpURLConnection , esto se puede resolver también por parte del cliente:

Los flujos de entrada y salida devueltos por esta clase no están almacenados en el búfer. La mayoría de las personas que llaman deben envolver las secuencias devueltas con BufferedInputStream o BufferedOutputStream. Las personas que llaman que solo realizan lecturas o escrituras masivas pueden omitir el almacenamiento en búfer. Cuando transfiera grandes cantidades de datos hacia o desde un servidor, use transmisiones para limitar la cantidad de datos que hay en la memoria a la vez. A menos que necesite que todo el cuerpo esté en la memoria a la vez, procese como una secuencia (en lugar de almacenar el cuerpo completo como una matriz o cadena de bytes únicos).

Para reducir la latencia, esta clase puede reutilizar el mismo socket subyacente para múltiples pares de solicitud / respuesta. Como resultado, las conexiones HTTP pueden mantenerse abiertas más de lo necesario. Las llamadas para desconectar () pueden devolver el socket a un grupo de sockets conectados. Este comportamiento se puede deshabilitar estableciendo la propiedad del sistema http.keepAlive en falso antes de emitir cualquier solicitud HTTP. La propiedad http.maxConnections se puede usar para controlar la cantidad de conexiones inactivas a cada servidor.

Tomado de: developer.android.com/reference/java/net/HttpURLConnection.html


en mi situación, el problema ha sido resuelto limpiando la dirección proxy y el puerto de APN que fue producido por el operador. como lo he probado, usar la dirección IP del servidor remoto en lugar del nombre de dominio también puede resolver el problema.