شبکه چند نفره

برای بسیاری از نیازهای شبکه چند نفره، پروتکل‌های Network Discover اندروید باید تمام آنچه را که نیاز دارید فراهم کنند و مطابق انتظار کار کنند. ChromeOS همچنین دارای قابلیت ارسال و دریافت داخلی broadcast در هر دو جهت است تا اطمینان حاصل شود که بازی شما به درستی پاسخ‌ها را به بسته‌های broadcast ارسال شده به دستگاه‌های همتا در شبکه محلی دریافت می‌کند و بسته‌های broadcast ارسال شده توسط سایر دستگاه‌های همتا در شبکه محلی را نیز دریافت می‌کند.

با توجه به معماری و قوانین امنیتی ChromeOS، یک برنامه اندروید که نیاز به دانستن آدرس IPv4 دستگاه ChromeOS که روی آن اجرا می‌شود دارد، برای مثال برای ارتباط دادن آدرس به سروری که می‌خواهد یک بازی چند نفره کلاینت به کلاینت را با کلاینت‌های غیر Chrome OS که در همان شبکه محلی قرار دارند، انجام دهد، نیاز به پیاده‌سازی منطق اضافی خواهد داشت.

برای دریافت آدرس IPv4 اختصاص داده شده به شبکه‌ای با بالاترین اولویت که دستگاه ChromeOS به آن متصل است، ویژگی سیستم اندروید 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 در شبکه محلی، بدون نیاز به هیچ گونه "سوراخ کاری" اضافی NAT، به برنامه اندروید ارسال خواهد شد. برای اطلاعات بیشتر در مورد این راه حل IPv4، به این مشکل کروم مراجعه کنید.

در شبکه‌های IPv6، اندروید آدرس شبکه مخصوص به خود را جدا از ChromeOS دریافت می‌کند و انتظار می‌رود اتصالات مستقیم در شبکه محلی IPv6 به و از این آدرس، طوری کار کنند که گویی اندروید مستقیماً به شبکه محلی IPv6 متصل است.