es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la mejor manera de vincular mi propio hardware con mi aplicación en una red LAN?

Tengo hardware basado en un microcontrolador con comunicación Ethernet.

Hay un servidor TCP en el microcontrolador.

Para configurar el hardware, tengo una aplicación hecha en C# para Android.

La aplicación, a su vez, tiene un cliente TCP.

Para que la aplicación encuentre mi hardware, lo que estoy haciendo es hacer ping a cada una de las direcciones de la misma segmento de red de mi móvil. Es decir, si la dirección IP de mi móvil es 192.168.0.xx, hago ping desde la dirección 192.168.0.1 hasta la dirección 192.168.0.255.

Aquellas direcciones que responden, intento abrir un socket y enviar un marco de datos. Si la respuesta es correcta, asumo que he encontrado un hardware en mi red local (puede haber más de uno conectado).

Obviamente, descarto aquellas direcciones IP que no responden, o que el socket no se puede abrir, o que respondan algo incorrecto.

Esas direcciones válidas se muestran en una lista para que el usuario elija con cuál interactuar.

También, estas direcciones válidas se guardan en la aplicación para que la próxima vez que se abra la app, se conecte automáticamente a las direcciones almacenadas, evitando el escaneo de las direcciones IP.

Esto me parece correcto la primera vez que el usuario instala el hardware y lo configura con la app.

El problema es que me informaron que hay usuarios cuyos routers están configurados para renovar sus direcciones IP una vez al mes.

Si esto sucede, la aplicación debería realizar nuevamente un escaneo de todas las direcciones IP, y esto es algo engorroso, ya que escanear todas las IPs lleva tiempo, no creo que los usuarios estén contentos configurando su app y hardware una vez al mes.

Otra solución engorrosa podría ser utilizar direcciones IP estáticas, pero tampoco creo que sea una buena idea.

¿Alguna sugerencia de cómo mejorar esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una sugerencia para mejorar esto podría ser usar un nombre de host en lugar de una dirección IP. De esta manera, incluso si la dirección IP cambia, el nombre de host seguirá siendo el mismo. Para implementar esto, el hardware debe ser configurado con un nombre de host y la aplicación de Android debe utilizar un verificador de nombres de host para conectarse al hardware utilizando su nombre de host en lugar de su dirección IP. De esta manera, incluso si la dirección IP cambia debido a la configuración del enrutador, la aplicación seguirá pudiendo conectarse al hardware utilizando su nombre de host.

    Otra solución podría ser utilizar un protocolo de descubrimiento de servicios como UPnP o Bonjour. Estos protocolos permiten a los dispositivos descubrir y comunicarse entre sí en una red local sin la necesidad de configuración manual o escaneo de direcciones IP. El hardware puede anunciarse utilizando el protocolo de descubrimiento de servicios y la aplicación de Android puede buscar y conectarse al hardware utilizando el mismo protocolo. De esta manera, incluso si la dirección IP cambia, la aplicación seguirá pudiendo descubrir y comunicarse con el hardware utilizando el protocolo de descubrimiento de servicios.

    Ambas soluciones pueden simplificar el proceso de configuración para los usuarios y reducir la necesidad de escanear direcciones IP. Sin embargo, requieren una configuración adicional en el hardware y/o en la aplicación.

Comments are closed.