Для многих задач многопользовательской сетевой игры протоколы обнаружения сети Android должны обеспечить все необходимое и работать должным образом. ChromeOS также имеет встроенную пересылку широковещательных пакетов в обоих направлениях, чтобы гарантировать, что ваша игра будет корректно получать ответы на широковещательные пакеты, отправленные другим участникам локальной сети, а также получать широковещательные пакеты, отправленные другими участниками локальной сети.
В силу архитектуры ChromeOS и правил безопасности, Android-приложению, которому необходимо знать IPv4-адрес устройства ChromeOS, на котором оно работает, например, для передачи этого адреса серверу, который хочет выступать посредником в многопользовательской игре между клиентами, не использующими ChromeOS, находящимися в той же локальной сети, потребуется реализовать дополнительную логику.
Чтобы получить IPv4-адрес, назначенный сети с наивысшим приоритетом, к которой подключено устройство ChromeOS, проверьте системное свойство Android vendor.arc.net.ipv4.host_address и, при необходимости, vendor.arc.net.ipv4.host_gateway . Один из способов сделать это:
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() }
Трафик, отправляемый на этот IPv4-адрес в локальной сети, будет перенаправлен в приложение Android без необходимости дополнительной пробивки NAT. Для получения дополнительной информации об этом обходном решении для IPv4 см. эту проблему в Chromium .
В сетях IPv6 Android получает собственный сетевой адрес, отдельный от ChromeOS, и ожидается, что прямые соединения в локальной сети IPv6 с этим адресом будут работать так, как если бы Android был напрямую подключен к локальной сети IPv6.