多人游戏联网

对于许多多人游戏联网需求,Android 的网络发现协议应该可以满足您的所有需求,并按预期运行。ChromeOS 还具有双向内置广播转发功能,可确保游戏正确接收发送到本地网络上对等方的广播数据包的响应,并接收本地网络上其他对等方发送的广播数据包。

由于 ChromeOS 的架构和安全规则,需要知道其所运行的 ChromeOS 设备的 IPv4 地址的 Android 应用(例如,为了将该地址传达给希望在同一本地网络中与非 ChromeOS 客户端中介客户端到客户端多人游戏的服务器)将需要实现一些额外的逻辑。

如需获取 ChromeOS 设备所连接的最高优先级网络的 IPv4 地址,请检查 Android 系统属性 vendor.arc.net.ipv4.host_addressvendor.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 网络一样。