Kết nối mạng nhiều người chơi

Đối với nhiều nhu cầu về mạng nhiều người chơi, các giao thức Network Discover của Android sẽ cung cấp mọi thứ bạn cần và hoạt động như dự kiến. ChromeOS cũng có tính năng chuyển tiếp thông báo tích hợp theo cả hai hướng để đảm bảo trò chơi của bạn sẽ nhận được phản hồi chính xác cho các gói thông báo được gửi đến các thiết bị ngang hàng trên mạng cục bộ và nhận các gói thông báo do các thiết bị ngang hàng khác gửi trên mạng cục bộ.

Do kiến trúc và các quy tắc bảo mật của ChromeOS, một ứng dụng Android cần biết địa chỉ IPv4 của thiết bị ChromeOS mà ứng dụng đang chạy (ví dụ: để truyền địa chỉ đến một máy chủ muốn làm trung gian cho một trò chơi nhiều người chơi giữa các ứng dụng với các ứng dụng không phải ChromeOS nằm trong cùng một mạng cục bộ) sẽ cần triển khai thêm một số logic.

Để lấy địa chỉ IPv4 được chỉ định cho mạng có mức độ ưu tiên cao nhất mà thiết bị ChromeOS kết nối, hãy kiểm tra thuộc tính hệ thống Android vendor.arc.net.ipv4.host_address và nếu cần, hãy kiểm tra vendor.arc.net.ipv4.host_gateway. Một cách để thực hiện việc này là:

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

Lưu lượng truy cập được gửi đến địa chỉ IPv4 này trên mạng cục bộ sẽ được chuyển tiếp đến ứng dụng Android mà không cần thêm bất kỳ "lỗ" NAT nào. Để biết thêm thông tin về giải pháp thay thế IPv4 này, hãy xem vấn đề này trên chromium.

Trên mạng IPv6, Android nhận địa chỉ mạng riêng biệt với ChromeOS và các kết nối trực tiếp trên mạng IPv6 cục bộ đến và đi từ địa chỉ này dự kiến sẽ hoạt động như thể Android được kết nối trực tiếp với mạng IPv6 cục bộ.