Per molte esigenze di networking multiplayer, i protocolli di Network Discover di Android dovrebbero fornire tutto ciò di cui hai bisogno e funzionare come previsto. ChromeOS dispone anche di un inoltro della trasmissione bidirezionale integrato per garantire che il gioco riceva correttamente le risposte ai pacchetti di trasmissione inviati ai peer sulla rete locale e per ricevere i pacchetti di trasmissione inviati da altri peer sulla rete locale.
A causa dell'architettura e delle regole di sicurezza di ChromeOS, un'app per Android che deve conoscere l'indirizzo IPv4 del dispositivo ChromeOS su cui è in esecuzione, ad esempio per comunicare l'indirizzo a un server che vuole fare da intermediario per un gioco multiplayer da client a client con client non ChromeOS che si trovano all'interno della stessa rete locale, dovrà implementare una logica aggiuntiva.
Per ottenere l'indirizzo IPv4 assegnato alla rete con la priorità più alta a cui è connesso il dispositivo ChromeOS, esamina la proprietà di sistema Android vendor.arc.net.ipv4.host_address e, se necessario, vendor.arc.net.ipv4.host_gateway. Un modo per farlo è:
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() }
Il traffico inviato a questo indirizzo IPv4 sulla rete locale verrà inoltrato all'app per Android, senza la necessità di ulteriori "hole punching" NAT. Per ulteriori informazioni su questa soluzione alternativa IPv4, consulta questo problema di Chromium.
Sulle reti IPv6, Android riceve il proprio indirizzo di rete separato da ChromeOS e le connessioni dirette sulla rete IPv6 locale da e verso questo indirizzo dovrebbero funzionare come se Android fosse connesso direttamente alla rete IPv6 locale.