Protocolos de alto nivel para Bluetooth / WiFi Direct Sockets?

Cuando trabajas con Bluetooth o WiFi Direct en Android, al final de todo el proceso de apretón de manos y tal, terminas con zócalos.

Con TCP / IP, tenemos una biblioteca de zillion-plus-one que se encuentra encima de sockets, para protocolos de alto nivel: HTTP, XMPP, IMAP, etc. Gracias a estas bibliotecas, podemos tratar con más abstracciones específicas de dominio de Una operación (por ejemplo, "descargar este archivo"), con la plomería de socket de bajo nivel manejada por la biblioteca.

Pregunta : ¿Existen equivalentes, para cualquier protocolo de alto nivel, que se sabe que funcionan (o es probable que funcionen) con los sockets producidos a través de las capas Bluetooth y / o WiFi Direct de Android?

En este momento, no soy quisquilloso sobre el protocolo específico – sólo estoy buscando ejemplos de este tipo de capa de protocolo, para hacer más fácil este tipo de opciones de conectividad para los desarrolladores.

Por ejemplo, parece que podría crear un fork o add-on para OkHTTP que utiliza una fuente alternativa para sockets, y probablemente podría crear un servidor HTTP de Java que hace lo mismo. Dado esto, los desarrolladores de aplicaciones escribirían aplicaciones HTTP que hablaban a través de Bluetooth o WiFi Direct (y, por lo menos en el lado del cliente, la codificación debería ser bastante "natural", una vez que el acoplamiento específico de conectividad y el apretón de manos se han prolongado).

IOW, volviendo a ocuparse de los enchufes sin procesar se siente tan hace dos décadas … 🙂

¡Gracias!


ACTUALIZAR

Basándome en el comentario de Kristopher Micinski sobre la respuesta de ZeroMQ, pensé que podría aclararse algo.

Es más fácil decir lo que no quiero: no quiero tocar las tomas, después de crearlas. Algo más en un nivel más alto debería manejar esos para mí, además de manejar lo que consideraría un "protocolo" (por ejemplo, determinar cuándo alguna operación de comunicaciones ha terminado, más allá de un cierre de socket).

Sobre todo, esto es para mi libro. La mayoría de los ejemplos de libros de contenido de socket de bajo nivel son poco realistas, como "abrimos un socket al servidor e inmediatamente comenzamos a explotar los bytes que representan alguna imagen que se va a cargar, luego cerraremos el socket cuando hayamos terminado". Mientras los ejemplos funcionan, nunca escribirías algo así en la vida real:

  • Si realmente estás trabajando en el nivel de socket, estarías implementando algún protocolo que tenga la esperanza de abordar la autenticación, el manejo de errores, etc., incluso si estás rodando el protocolo tú mismo

  • Pocos desarrolladores trabajan directamente con sockets hoy para operaciones de Internet

Ahora, sería genial si el protocolo ofrecido por la capa era algo a lo que los desarrolladores estaban acostumbrados (por ejemplo, HTTP) o habían oído hablar incluso si no lo habían usado (por ejemplo, XMPP). Y me conformaré con escenarios simples (por ejemplo, el soporte de N-way es bueno pero no es necesario). En este sentido, basado en la investigación preliminar (llevada a cabo por un cerebro privado de sueño), ZeroMQ no es una mala opción. Le falta un poco de "reconocimiento de marca" en comparación con, digamos, una pila XMPP que podría funcionar con sockets arbitrarios. Pero fuera del brazalete parece encontrar lo que más estoy buscando.

Reconozco que estas pilas tendrán limitaciones impuestas por el transporte subyacente (por ejemplo, Bluetooth funciona bien para N-way sólo para valores pequeños de N). Y ciertamente no quiero retratar – aquí o en mi libro – que cualquier solución que retratar es el ser-todo y el final de toda la comunicación basada en socket.

Sólo quiero algo que tenga una oración de ser más realista para el uso real. Puntos de bonificación si es algo que puedo grok, ya que siempre he utilizado protocolos de nivel superior para las comunicaciones TCP / IP, y por lo tanto tengo poca experiencia con la manipulación directa de socket.

He encontrado que ZeroMQ es útil para gestionar la conexión de socket. Tienen un soporte en varios idiomas que incluye JAVA. Puede utilizarlo para administrar los sockets una vez que establezca la conexión a través de wifi-direct o BT.

Sé que es una pregunta algo antigua y ya respondí pero me gustaría contribuir.

Hice esta aplicación: https://play.google.com/store/apps/details?id=com.budius.WiFiShoot y aunque el enlace de conexión directa WiFi n apretón de manos está un poco roto y es lo que causa la mayoría de mis usuarios infelices, yo Estoy manejando toda la comunicación usando el excelente https://github.com/EsotericSoftware/kryonet

Y mi código es más o menos lo que ves en sus ejemplos, crear kryo, registrar las clases, abrir el servidor, conectar el cliente a la IP del servidor y disparar objetos a través de la información del archivo y más tarde grabo los archivos reales con este código https: // code .google.com / p / kryonet / fuente / browse / trunk / kryonet / test / com / esotericsoftware / kryonet / InputStreamSenderTest.java

Espero eso ayude.

  • No se pueden cargar archivos de biblioteca .so al hacer una aplicación de sistema
  • Reloj de 24 horas no funciona en formato dateformat android
  • Cómo quitar divisor entre Toolbar y RelativeLayout
  • Cómo probar si el cursor está vacío en una consulta SQLiteDatabase
  • Mantenga el elemento de lista highlite con SimpleCursorAdapter
  • ¿Cómo podemos simular llamadas y SMS en Android?
  • Prueba recyclerView con Espresso, cómo realizar clics o hacer afirmaciones
  • Acceso a archivos de recursos en Android
  • Obtener la hora y la fecha actuales en una escala de tiempo de 24 horas
  • ¿Cómo forzar a la aplicación a crear una miniatura (instantánea) para la lista de aplicaciones recientes?
  • Android studio dalvik vm no puede encontrar la clase
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.