对于许多多人游戏联网需求,Android 的网络发现协议应该可以满足您的所有需求,并按预期运行。ChromeOS 还具有双向内置广播转发功能,可确保游戏正确接收发送到本地网络上对等方的广播数据包的响应,并接收本地网络上其他对等方发送的广播数据包。
由于 ChromeOS 的架构和安全规则,需要知道其所运行的 ChromeOS 设备的 IPv4 地址的 Android 应用(例如,为了将该地址传达给希望在同一本地网络中与非 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 网络一样。