Estoy comenzando un proyecto pequeño, básicamente una variación multijugador (como en más de dos jugadores) del clásico juego Battleship.Android P2P (conexión directa) a través de Internet (detrás de NAT)
Un problema que estoy tratando de resolver antes de sumergirme en la codificación es el problema de la comunicación entre los múltiples jugadores. Una posibilidad actual es utilizar un servidor HTTP central como el centro de comunicación central (junto con la API C2DM de Android para permitir la comunicación de inserción desde el servidor HTTP a los dispositivos). Esta parece una buena solución, porque en teoría, siempre y cuando tengas acceso a Internet, debería funcionar perfectamente, tanto si estás detrás de un NAT como si no.
Sin embargo, la solución propuesta tiene la desventaja de que existe un único punto de falla/carga adicional (el servidor web). Entonces me gustaría probar otras opciones. Pensé en hacer conexiones directas usando Sockets entre los clientes (con el servidor web solo siendo utilizado como punto de encuentro inicial), sin embargo, esto solo funcionaría si todos los dispositivos estuvieran en la misma red. Teniendo en cuenta que hoy estamos casi siempre detrás de la NAT de un enrutador, ¿cómo puedo lograr la comunicación directa? He estado leyendo sobre agujeros perforados, pero no encuentro ninguna buena biblioteca que esté bien documentada (contiene buenos ejemplos de uso) y eso funciona con seguridad en Android. También la mayoría (si no todas) las técnicas de perforación (STUN, ICE, etc ...) ampliamente disponibles solo funcionan con UDP, lo cual está bien para audio/video y juegos multijugador en tiempo real que pueden perder algunos mensajes, pero para un turno multijugador es importante garantizar la entrega de los datos de cada turno (algo que no es posible directamente con UDP).
¿Alguna idea de cómo lograr una perforación fiable (preferiblemente sobre TCP) entre dispositivos Android detrás de NAT? No tiene que funcionar en el 100% de los casos (algunos NAT extraños pueden no ser compatibles) pero sería bueno si funcionara en la mayoría de los casos.
La solución presentada por Win Myo Htet tiene un gran potencial (usa la propia infraestructura de Google). Sin embargo, todavía estoy interesado en una buena solución para TCP y/o perforación UDP en Android. – petersaints
¿Qué terminaste con @petersaints? – kishu27