Java.net.SocketException: sendto failed: EPIPE (Broken pipe) sobre una conexión de datos a localhost

En mi aplicación de Android quiero leer un flujo de audio y analizar sus metadatos de shoutcast. Lo conseguí usando un StreamProxy como en el proyecto NPR: http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java? R = e4984187f45c39a54ea6c88f71197762dbe10e72

El problema es que no funciona sobre una conexión de datos. NPR tiene el mismo problema.

Para resumir, este proxy se está ejecutando como un servidor web local, haciendo una interfaz entre la aplicación y el flujo remoto. Se está ejecutando en localhost 127.0.0.1 con un puerto personalizado generado. Cuando el servidor está leyendo los datos de flujo, lo replica a la aplicación como se puede leer en la línea 223 en StreamProxy :

client.getOutputStream().write(buff, 0, readBytes); 

Sin embargo, esa línea produce esta excepción en una conexión de datos:

 java.net.SocketException: sendto failed: EPIPE (Broken pipe) 

No soy un experto en sockets y streaming. No consigo lo que hace una diferencia entre un wifi y una conexión de datos en ese caso.

A continuación hay pocas soluciones!

En primer lugar asegúrese de que su cliente tiene la misma versión que el servidor que está intentando unirse. Si no tienes la misma versión, puedes descargar MCNostalgia y usarla para degradar tu cliente.

Actualizar Java

Si no desea tener problemas de incompatibilidad, le jre 7.0_05 que instale el último entorno de ejecución Java ( jre 7.0_05 ). Antes de hacerlo, se recomienda desinstalar otras versiones anteriores. Si su sistema operativo funciona en 32bit entonces instale la versión 32bit ( x86 ) solamente. Si tiene 64bit , instale ambos a partir de 64bit y, a continuación, 32bit en este orden preciso.

Inhabilitar hosts de red que no se necesitan

Hamachi y Virtual Box podría ser uno de ellos. Pueden ralentizar o interferir con su conexión. Acceda al panel de control de red y haga clic en " modify network cards " (o algo similar). Haga clic con el botón derecho del ratón en el host que necesite deshabilitar y, a continuación, haga clic en desactivar.

Deshabilitar el firewall

Puede acceder a la configuración del cortafuegos en el panel de control y deshabilitarla allí. Si eso no funciona, también puede intentar desactivar el firewall de su enrutador. Si fallan, intente deshabilitar su antivirus (estas opciones no se recomiendan, ya que los hackers pueden infiltrar fácilmente su computadora).

Esto también funciona para:

 > Internal exception: java.net.SocketException: Software caused > connection abort: socket write error 
  • ¿Cuál es la diferencia entre MediaPlayer y VideoView en Android
  • ANDROID: ¿Hay reproductor multimedia gratuito de terceros para streaming de vídeo MPEG4?
  • Android: transmisión de la cámara como mjpeg
  • Crear una aplicación de transmisión en tiempo real para Android
  • Cómo transmitir vídeo desde Internet a través de nanoHTTPd a VideoView
  • Algoritmo de tasa de bits adaptativo RTMP
  • Transmisión en directo desde la aplicación de Android a Youtube
  • Transferir flujo de video en tiempo real al servidor mediante Android
  • Flujo de audio Bluetooth entre dispositivos Android
  • Android: la transmisión de radio AAC + no funciona con MediaPlayer (enlaces Android 4.2.2 / Shoucast)
  • Grabación de vídeo de Android Vine / Instagram
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.