多人遊戲網路

對於許多多人連線網路需求,Android 的網路探索通訊協定應可提供您所需的一切,並正常運作。ChromeOS 也內建雙向廣播轉送功能,可確保遊戲正確接收傳送至本機網路同層級裝置的廣播封包回應,以及接收本機網路其他同層級裝置傳送的廣播封包。

由於 ChromeOS 的架構和安全性規則,Android 應用程式需要知道所執行 ChromeOS 裝置的 IPv4 位址 (例如為了將位址傳達給伺服器,以便與位於相同本機網路的非 ChromeOS 用戶端,仲介用戶端對用戶端的多人遊戲),因此需要實作一些額外的邏輯。

如要取得指派給 ChromeOS 裝置所連線最高優先順序網路的 IPv4 位址,請檢查 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 網路一樣。