Para muitas necessidades de rede multiplayer, os protocolos de descoberta de rede do Android oferecem tudo o que você precisa e funcionam conforme o esperado. O ChromeOS também tem encaminhamento de transmissão integrado nos dois sentidos para garantir que o jogo receba corretamente as respostas aos pacotes de transmissão enviados aos colegas na rede local e receba os pacotes de transmissão enviados por outros colegas na rede local.
Devido à arquitetura e às regras de segurança do ChromeOS, um app Android que precisa saber o endereço IPv4 do dispositivo ChromeOS em que está sendo executado, por exemplo, para comunicar o endereço a um servidor que quer intermediar um jogo multiplayer cliente a cliente com clientes que não usam o ChromeOS localizados na mesma rede local, precisará implementar alguma lógica adicional.
Para conferir o endereço IPv4 atribuído à rede de maior prioridade a que o dispositivo ChromeOS está conectado, examine a propriedade do sistema Android vendor.arc.net.ipv4.host_address e, se necessário, vendor.arc.net.ipv4.host_gateway. Uma maneira de fazer isso é:
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() }
O tráfego enviado para esse endereço IPv4 na rede local será encaminhado para o app Android, sem a necessidade de "perfuração de buracos" NAT adicional. Para mais informações sobre essa alternativa de solução do IPv4, consulte este problema do Chromium.
Em redes IPv6, o Android recebe um endereço de rede próprio separado do ChromeOS, e as conexões diretas na rede IPv6 local de e para esse endereço devem funcionar como se o Android estivesse conectado diretamente à rede IPv6 local.