Redes multijugador

Para muchas necesidades de redes de varios jugadores, los protocolos de Network Discover de Android deberían proporcionar todo lo que necesitas y funcionar según lo previsto. ChromeOS también tiene reenvío de transmisión integrado en ambas direcciones para garantizar que tu juego reciba correctamente las respuestas a los paquetes de transmisión enviados a los pares en la red local y para recibir los paquetes de transmisión enviados por otros pares en la red local.

Debido a la arquitectura y las reglas de seguridad de ChromeOS, una app para Android que necesite conocer la dirección IPv4 del dispositivo ChromeOS en el que se ejecuta, por ejemplo, para comunicar la dirección a un servidor que desee intermediar un juego multijugador cliente a cliente con clientes que no sean de ChromeOS ubicados dentro de la misma red local, por ejemplo, deberá implementar cierta lógica adicional.

Para obtener la dirección IPv4 asignada a la red de mayor prioridad a la que está conectado el dispositivo ChromeOS, examina la propiedad del sistema Android vendor.arc.net.ipv4.host_address y, si es necesario, vendor.arc.net.ipv4.host_gateway. Una forma de hacerlo es la siguiente:

fun getChromeOsIpAddress() : String {
   val process = ProcessBuilder().command("/system/bin/getprop", "vendor.arc.net.ipv4.host_address").start()
   val ipAddress = readInput(process.inputStream)
   return ipAddress
}

fun getChromeOsIpGateway() : String {
   val process = ProcessBuilder().command("/system/bin/getprop", "vendor.arc.net.ipv4.host_gateway").start()
   val gatewayAddress = readInput(process.inputStream)
   return gatewayAddress
}

fun readInput(inputStream: InputStream) : String {
   val bufferedReader = BufferedReader(InputStreamReader(inputStream))
   val stringBuilder = StringBuilder()

   var line: String? = null
   while (bufferedReader.readLine().also({ line = it}) != null) {
       stringBuilder.append(line).append('\n')
   }

   return stringBuilder.toString()
}

El tráfico enviado a esta dirección IPv4 en la red local se reenviará a la app para Android, sin necesidad de ninguna “perforación” de NAT adicional. Para obtener más información sobre esta solución alternativa de IPv4, consulta este problema de Chromium.

En las redes IPv6, Android recibe su propia dirección de red independiente de ChromeOS, y se espera que las conexiones directas en la red IPv6 local hacia y desde esta dirección funcionen como si Android estuviera conectado directamente a la red IPv6 local.