Für viele Anforderungen an die Multiplayer-Netzwerkkommunikation sollten die Network Discover-Protokolle von Android alles bieten, was Sie benötigen, und wie erwartet funktionieren. ChromeOS verfügt außerdem über eine integrierte Broadcast-Weiterleitung in beide Richtungen, damit Ihr Spiel Antworten auf Broadcast-Pakete, die an Peers im lokalen Netzwerk gesendet werden, und Broadcast-Pakete, die von anderen Peers im lokalen Netzwerk gesendet werden, korrekt empfängt.
Aufgrund der Architektur und der Sicherheitsregeln von ChromeOS muss für eine Android-App, die die IPv4-Adresse des ChromeOS-Geräts benötigt, auf dem sie ausgeführt wird, zusätzliche Logik implementiert werden. Das ist beispielsweise erforderlich, um die Adresse an einen Server zu senden, der ein Client-zu-Client-Mehrspielerspiel mit Nicht-ChromeOS-Clients im selben lokalen Netzwerk vermitteln möchte.
Die IPv4-Adresse des Netzwerks mit der höchsten Priorität, mit dem das ChromeOS-Gerät verbunden ist, finden Sie in der Android-Systemeigenschaft vendor.arc.net.ipv4.host_address und bei Bedarf in vendor.arc.net.ipv4.host_gateway. Eine Möglichkeit dazu ist:
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() }
Traffic, der an diese IPv4-Adresse im lokalen Netzwerk gesendet wird, wird an die Android-App weitergeleitet, ohne dass zusätzliches NAT-„Hole Punching“ erforderlich ist. Weitere Informationen zu dieser IPv4-Problemumgehung finden Sie in diesem Chromium-Eintrag.
In IPv6-Netzwerken erhält Android eine eigene Netzwerkadresse, die von ChromeOS getrennt ist. Direkte Verbindungen im lokalen IPv6-Netzwerk zu und von dieser Adresse sollten so funktionieren, als wäre Android direkt mit dem lokalen IPv6-Netzwerk verbunden.