Sieć wieloosobowa

W przypadku wielu potrzeb związanych z siecią w grach wieloosobowych protokoły Android Network Discover powinny zapewnić wszystko, czego potrzebujesz, i działać zgodnie z oczekiwaniami. ChromeOS ma też wbudowane przekazywanie transmisji w obu kierunkach, dzięki czemu gra będzie prawidłowo odbierać odpowiedzi na pakiety transmisji wysyłane do innych urządzeń w sieci lokalnej, a także pakiety transmisji wysyłane przez inne urządzenia w sieci lokalnej.

Ze względu na architekturę i zasady bezpieczeństwa ChromeOS aplikacja na Androida, która musi znać adres IPv4 urządzenia z ChromeOS, na którym jest uruchomiona (np. aby przekazać adres serwerowi, który chce pośredniczyć w grze wieloosobowej typu klient-klient z klientami innymi niż ChromeOS znajdującymi się w tej samej sieci lokalnej), będzie musiała zaimplementować dodatkową logikę.

Aby uzyskać adres IPv4 przypisany do sieci o najwyższym priorytecie, z którą połączone jest urządzenie z ChromeOS, sprawdź właściwość systemu Android vendor.arc.net.ipv4.host_address i w razie potrzeby vendor.arc.net.ipv4.host_gateway. Możesz to zrobić w ten sposób:

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()
}

Ruch wysyłany na ten adres IPv4 w sieci lokalnej będzie przekazywany do aplikacji na Androida bez konieczności wykonywania dodatkowego „przebijania” NAT. Więcej informacji o tym obejściu związanym z adresem IPv4 znajdziesz w tym artykule o problemie w Chromium.

W sieciach IPv6 Android otrzymuje własny adres sieciowy, oddzielny od ChromeOS. Bezpośrednie połączenia w lokalnej sieci IPv6 z tym adresem i do niego powinny działać tak, jakby Android był bezpośrednio połączony z lokalną siecią IPv6.