मल्टीप्लेयर नेटवर्किंग

मल्टीप्लेयर गेम में नेटवर्किंग से जुड़ी कई ज़रूरतों के लिए, Android के Network Discover प्रोटोकॉल आपकी सभी ज़रूरतों को पूरा करते हैं और उम्मीद के मुताबिक काम करते हैं. 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 से जुड़ी यह समस्या देखें.

आईपीवी6 नेटवर्क पर, Android को अपना नेटवर्क पता मिलता है, जो ChromeOS से अलग होता है. इस पते पर, लोकल आईपीवी6 नेटवर्क से सीधे तौर पर कनेक्शन बनाने और डेटा ट्रांसफ़र करने की सुविधा, उसी तरह काम करती है जैसे Android सीधे तौर पर लोकल आईपीवी6 नेटवर्क से कनेक्ट हो.