android multicast jmdns

Multicast en Android 2.2



jmdns (3)

¿Alguien ha conseguido que Multicast funcione en Android 2.2, específicamente JmDNS para la detección del servicio Bonjour? Hay muchas preguntas y respuestas del intervalo de tiempo de Android 1.5-> 2.0, incluido en stackOverflow, que indican distintos niveles de éxito, y un error en el rastreador de errores que indica que se corrigió y cerró, para 2.2 ( http://code.google.com/p/android/issues/detail?id=2323 ). He probado el código fuente de "TuneControl", pero funcionó en ~ 1.5 y no se ha actualizado, y no funciona para mí en 2.2.

Entonces, las preguntas ... 1) ¿ Alguien ha visto el trabajo de multidifusión en 2.2, específicamente JmDNS, y específicamente para la detección del servicio Bonjour?

2) ¿Qué es necesario en el código para hacer este trabajo?

Estoy usando los permisos apropiados:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

Adquiero el bloqueo de multidifusión:

WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE ); if(wifi != null) { MulticastLock mcLock = wifi.createMulticastLock("mylock"); mcLock.acquire(); ...

Y luego intente iniciar jmDNS para buscar servidores:

mdns = JmDNS.create(addr, HOSTNAME); jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener); jmdns.addServiceListener(DACP_TYPE, listener); ...

El oyente nunca ve ningún servicio. He verificado que con Wireshark se envían los paquetes de solicitud y que el servidor responde, pero el código de escucha de socket nunca ve el paquete de respuesta en la biblioteca jmDNS.

Entonces ... ¿me estoy perdiendo algo? ¿Esto sigue siendo un error? ¿ALGUIEN ha conseguido algo tan remotamente así para que funcione?


Creo que la otra razón es que tu AP no es compatible.

Otro: Ordenador enviar / recibir a / desde Android

su computadora solo debe usar WIFI, lo mejor de todas las demás redes


He estado investigando un poco sobre esto, y creo que es un problema con Android en general, y se ha corregido en o alrededor de Android 2.3.7.

Es un poco demasiado anecdótico, pero esto es lo que probé:

  • HTC Desire, 2.2, stock: fail
  • HTC Desire, 2.3.7, CyanogenMod: éxito
  • Motorola Milestone, 2.1-update1: falla
  • HTC Desire S, 2.3.3: falla
  • Acer Iconia A501, 3.2.1: éxito
  • Samsung algo, 2.3.3: falla
  • HTC Legend, 2.2 creo: falla

Cuando digo "fallar", de hecho, todos pudieron enviar mensajes de multidifusión a los dispositivos de "éxito", pero nunca recibieron nada a excepción de sus propios mensajes, como describe jldupont.

Tenga en cuenta que la aplicación de mensajería instantánea de multidifusión Kouchat solo está disponible desde 2.3.7 en adelante, aunque puede compilarse desde la Kouchat 2.1, lo que le da más credibilidad a esta teoría.


Para responder (de manera ruda) a mi propia pregunta, otra persona proporcionó más información en http://code.google.com/p/android/issues/detail?id=2917#c48 . Para la posteridad, como dicen, aquí está la respuesta de brian.ro ... @ gmail.com ...

"He pasado bastante tiempo depurando problemas de mDNS con JmDNS en mi Evo y HTC Hero (CDMA). Lo que encontré es que parece que hay un filtro en el controlador inalámbrico de Broadcom en el Evo (y desde entonces m, obteniendo una reproducción similar de un usuario de HTC Desire (con el mismo conjunto de chips, presumiblemente también en ese teléfono). El filtro, de manera predeterminada, bloquea cualquier tráfico de difusión de red o sin difusión, incluido el de multidifusión. Aparentemente, la teoría es que ahorra batería .

El problema parece ser que el wpa_supplicant en el Evo no admite la eliminación de esos filtros cuando obtiene un MulticastLock. (Verifique la salida del registro justo después de que obtenga el bloqueo y verá lo que quiero decir). Desafortunadamente, lo que sucedió es que los proveedores de hardware han fragmentado el soporte de multidifusión ... :( "

Entonces ... parece que esto es un problema de dispositivo más que un problema de codificación. D''oh. :( Si tengo la oportunidad de probar en otro dispositivo ...