Kotlin में नेटवर्क प्रोग्रामिंग: सॉकेट से कोरूटीन तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में नेटवर्क प्रोग्रामिंग: सिद्धांत से व्यवहार तक

\n\n

आधुनिक दुनिया आपस में जुड़े अनुप्रयोगों की दुनिया है। चाहे वह चैटबॉट हो, ऑनलाइन गेम हो या माइक्रोसर्विस आर्किटेक्चर - सब कुछ नेटवर्क इंटरैक्शन पर आधारित है। और यदि पहले नेटवर्क प्रोग्रामिंग केवल Java या C++ से जुड़ी थी, तो आज Kotlin आत्मविश्वास से मंच पर आ रहा है।

\n\n

Kotlin ही क्यों? यह भाषा केवल "आधुनिक Java" नहीं है। इसने JVM दुनिया से सर्वश्रेष्ठ को शामिल किया है, जिसमें संक्षिप्तता, सुरक्षा और कोरूटीन के माध्यम से एसिंक्रोनसी के लिए शक्तिशाली समर्थन शामिल है। इस लेख में, हम देखेंगे कि Kotlin में नेटवर्क प्रोग्रामिंग कैसे लिखें - क्लासिक सॉकेट से लेकर कोरूटीन पर सुरुचिपूर्ण समाधान तक। आप सीखेंगे कि अपना TCP सर्वर कैसे बनाएं, UDP पैकेट कैसे भेजें और मल्टीथ्रेडिंग से पागल हुए बिना कैसे काम करें।

\n\n

Kotlin नेटवर्क कार्यों के लिए क्यों उपयुक्त है?

\n\n

कोड में गोता लगाने से पहले, आइए समझें कि Kotlin नेटवर्क प्रोग्रामिंग के लिए एक उत्कृष्ट विकल्प क्यों है:

\n\n
    \n
  • Java के साथ पूर्ण संगतता: आप java.net, java.nio और लोकप्रिय फ्रेमवर्क (Netty, Ktor) के पूरे शस्त्रागार का उपयोग कर सकते हैं।
  • \n
  • कोरूटीन: एसिंक्रोनस कोड सिंक्रोनस जैसा दिखता है। कॉलबैक नरक नहीं।
  • \n
  • Null-सुरक्षा: डेटा स्ट्रीम के साथ काम करते समय NullPointerException मिलने की संभावना कम।
  • \n
  • कार्यात्मक एक्सटेंशन: बाइट्स और स्ट्रिंग्स के साथ काम करने के लिए सुविधाजनक एक्सटेंशन फ़ंक्शन।
  • \n
\n\n

हम बुनियादी सॉकेट (पुराने Java की तरह) से शुरू करेंगे, और फिर कोरूटीन के साथ अधिक आधुनिक दृष्टिकोण पर आगे बढ़ेंगे।

\n\n

मूल बातें: Kotlin पर TCP सर्वर और क्लाइंट

\n\n

हम क्लासिक TCP कनेक्शन से शुरू करते हैं। Kotlin में, हम उन्हीं ServerSocket और Socket क्लास का उपयोग करते हैं, लेकिन अधिक स्वच्छ सिंटैक्स के साथ।

\n\n

एक सरल TCP इको सर्वर लिखना

\n\n

हमारा सर्वर क्लाइंट से संदेश प्राप्त करेगा और उन्हें वापस भेजेगा (इको)।

\n\n
import java.io.BufferedReader\nimport java.io.InputStreamReader\nimport java.io.PrintWriter\nimport java.net.ServerSocket\n\nfun main() {\n    val port = 8080\n    val serverSocket = ServerSocket(port)\n    println("सर्वर पोर्ट $port पर शुरू हुआ")\n\n    while (true) {\n        // क्लाइंट की प्रतीक्षा में ब्लॉक करें\n        val clientSocket = serverSocket.accept()\n        println("क्लाइंट कनेक्ट हुआ: ${clientSocket.inetAddress.hostAddress}")\n\n        // क्लाइंट को एक अलग थ्रेड में प्रोसेस करें (शैक्षिक उद्देश्यों के लिए)\n        Thread {\n            try {\n                val input = BufferedReader(InputStreamReader(clientSocket.inputStream))\n                val output = PrintWriter(clientSocket.outputStream, true)\n\n                var message: String?\n                while (input.readLine().also { message = it } != null) {\n                    println("प्राप्त: $message")\n                    output.println("इको: $message")\n                }\n            } catch (e: Exception) {\n                println("त्रुटि: ${e.message}")\n            } finally {\n                clientSocket.close()\n            }\n        }.start()\n    }\n}\n
\n\n

ध्यान दें: हम Thread { ... }.start() का उपयोग कर रहे हैं। यह काम करता है, लेकिन प्रोडक्शन के लिए थ्रेड पूल या कोरूटीन का उपयोग करना बेहतर है (इस पर बाद में)।

\n\n

इको सर्वर के लिए क्लाइंट

\n\n

अब एक क्लाइंट लिखते हैं जो सर्वर से कनेक्ट होता है और संदेश भेजता है:

\n\n
import java.io.BufferedReader\nimport java.io.InputStreamReader\nimport java.io.PrintWriter\nimport java.net.Socket\n\nfun main() {\n    val host = "localhost"\n    val port = 8080\n\n    try {\n        val socket = Socket(host, port)\n        val output = PrintWriter(socket.outputStream, true)\n        val input = BufferedReader(InputStreamReader(socket.inputStream))\n\n        // संदेश भेजें\n        val messages = listOf("नमस्ते, सर्वर!", "कैसे हो?", "अलविदा!")\n                

ब्लॉग

पुस्तक अनुशंसाएँ