多くのマルチプレイヤー ネットワーキングのニーズに対して、Android のネットワーク検出プロトコルは必要な機能をすべて提供し、期待どおりに動作します。ChromeOS には双方向のブロードキャスト転送機能も組み込まれており、ローカル ネットワーク上のピアに送信されたブロードキャスト パケットに対するレスポンスをゲームが正しく受信し、ローカル ネットワーク上の他のピアから送信されたブロードキャスト パケットを受信できるようになっています。
ChromeOS のアーキテクチャとセキュリティ ルールにより、実行中の ChromeOS デバイスの IPv4 アドレスを知る必要がある Android アプリ(たとえば、同じローカル ネットワーク内の ChromeOS 以外のクライアントとクライアント間のマルチプレイヤー ゲームを仲介するサーバーにアドレスを伝える場合など)は、追加のロジックを実装する必要があります。
ChromeOS デバイスが接続されている優先度の最も高いネットワークに割り当てられている IPv4 アドレスを取得するには、Android システム プロパティ vendor.arc.net.ipv4.host_address と、必要に応じて vendor.arc.net.ipv4.host_gateway を調べます。その方法の 1 つは次のとおりです。
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 アドレスに送信されたトラフィックは、追加の NAT「ホール パンチング」を必要とせずに、Android アプリに転送されます。この IPv4 回避策について詳しくは、こちらの Chromium の問題をご覧ください。
IPv6 ネットワークでは、Android は ChromeOS とは別の独自のネットワーク アドレスを受け取ります。このアドレスとの間のローカル IPv6 ネットワークでの直接接続は、Android がローカル IPv6 ネットワークに直接接続されているかのように機能することが期待されます。