paint-brush
पायथन में सॉकेट प्रोग्रामिंग के लिए एक आवश्यक गाइड: क्लाइंट, सर्वर और पीयर-टू-पीयर लाइब्रेरीद्वारा@pubnub
4,573 रीडिंग
4,573 रीडिंग

पायथन में सॉकेट प्रोग्रामिंग के लिए एक आवश्यक गाइड: क्लाइंट, सर्वर और पीयर-टू-पीयर लाइब्रेरी

द्वारा PubNub5m2023/03/06
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इस ट्यूटोरियल में, आप सीखेंगे कि पायथन सॉकेट प्रोग्रामिंग और सॉकेट एपीआई का उपयोग करके क्लाइंट और सर्वर के बीच डेटा का आदान-प्रदान कैसे करें। इस ट्यूटोरियल में प्रयुक्त स्रोत कोड [GitHub रिपॉजिटरी] में पाया जा सकता है:https://github.com/PubNubDevelopers/python-socket-demo।
featured image - पायथन में सॉकेट प्रोग्रामिंग के लिए एक आवश्यक गाइड: क्लाइंट, सर्वर और पीयर-टू-पीयर लाइब्रेरी
PubNub HackerNoon profile picture
0-item

इस ट्यूटोरियल में, आप सीखेंगे कि पायथन सॉकेट प्रोग्रामिंग और सॉकेट एपीआई का उपयोग करके क्लाइंट और सर्वर के बीच डेटा का आदान-प्रदान कैसे करें। बाद में, यह ट्यूटोरियल होस्ट किए गए प्रदाता का उपयोग करके सीधे दो या दो से अधिक पायथन क्लाइंट के बीच डेटा के आदान-प्रदान पर चर्चा करेगा। इस ट्यूटोरियल में उपयोग किए गए स्रोत कोड को GitHub रिपॉजिटरी में पाया जा सकता है।


सॉकेट प्रोग्रामिंग दो सॉकेट (एक क्लाइंट सॉकेट और एक सर्वर सॉकेट) को जोड़ती है और उन्हें रीयल-टाइम में द्वि-दिशात्मक रूप से संचार करने की अनुमति देती है। डायरेक्ट सॉकेट कनेक्शन सभी रीयल-टाइम अनुप्रयोगों को लाभान्वित कर सकते हैं क्योंकि डेटा कभी भी भेजा या प्राप्त किया जा सकता है।

पर्यावरण की स्थापना

आपको अपनी मशीन पर स्थापित पायथन संस्करण 3.x के एक स्थिर संस्करण की आवश्यकता होगी। यदि आप एक Windows उपयोगकर्ता हैं, तो आपके पास अपने PATH में Python जोड़ने का विकल्प है।


इस ट्यूटोरियल के साथ अनुसरण करने के लिए आपको एक कोड संपादक की भी आवश्यकता होगी।


विज़ुअल स्टूडियो कोड एक लोकप्रिय ओपन-सोर्स और मुफ़्त कोड संपादक है जो पायथन सहित कई भाषाओं और रूपरेखाओं का समर्थन करता है।


VSCode कोड पूरा करने और डिबगिंग में मदद करने के लिए Python के लिए एक्सटेंशन का भी समर्थन करता है।

पायथन सॉकेट एप्लिकेशन बनाएं और चलाएं

आइए पायथन का उपयोग करके एक सीधा सॉकेट एप्लिकेशन बनाएं। पायथन एक देशी सॉकेट क्लास (सॉकेट मॉड्यूल) प्रदान करता है, इसलिए डेवलपर्स को बाहरी पुस्तकालयों पर निर्भर रहने की आवश्यकता नहीं है। पायथन सॉकेट क्लाइंट और सर्वर की स्थापना करके शुरू करें:


पायथन सॉकेट स्टैक


प्रोजेक्ट डायरेक्टरी में client.py फाइल बनाएं। सॉकेट्स का उपयोग करने के लिए, पायथन सॉकेट लाइब्रेरी आयात करें और एक नया सॉकेट ऑब्जेक्ट बनाएं जो एक निर्दिष्ट आईपी पते से जुड़ता है (इस मामले में, लोकलहोस्ट पोर्ट नंबर 8080 पर है, लेकिन आप किसी भी आईपीवी 4 पते का चयन कर सकते हैं)।


सॉकेट सर्वर के लिए एक नया कनेक्शन बनाएं, टीसीपी सर्वर को डेटा भेजें और सॉकेट कनेक्शन बंद करें।


आपकी client.py फ़ाइल इस तरह दिखनी चाहिए:


 import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('0.0.0.0', 8080)) client.send("I am CLIENT\n".encode()) from_server = client.recv(4096) client.close() print (from_server.decode())


अपने क्लाइंट से आने वाले कनेक्शन और संदेशों को सुनने के लिए आपको सॉकेट सर्वर की आवश्यकता होगी।


फ़ाइल बनाएँ server.py और निम्नलिखित सामग्री जोड़ें:


 import socket serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv.bind(('0.0.0.0', 8080)) serv.listen(5) while True: conn, addr = serv.accept() from_client = '' while True: data = conn.recv(4096) if not data: break from_client += data.decode('utf8') print (from_client) conn.send("I am SERVER\n".encode()) conn.close() print ('client disconnected and shutdown')


Server.py सॉकेट ऑब्जेक्ट को पोर्ट 8080 पर होस्टनाम (लोकलहोस्ट) से बांधता है और नए क्लाइंट कनेक्शन के लिए लगातार सुनता है। जब कोई क्लाइंट इस पते से जुड़ता है, तो सर्वर कनेक्शन स्वीकार करता है और किसी भी डेटा को पढ़ता है।


क्लाइंट से डेटा सफलतापूर्वक पढ़ने के बाद, सर्वर डेटा प्रतिक्रिया प्रदान करता है, जिस बिंदु पर क्लाइंट कनेक्शन समाप्त कर देता है।


इसे स्वयं परखने के लिए, दो टर्मिनल विंडो एक साथ खोलें। एक विंडो में, चलाएँ:


 python3 server.py


दूसरी विंडो में, चलाएँ:


 python3 client.py


ध्यान दें कि सर्वर चलता रहता है और हर बार जब आप क्लाइंट चलाते हैं और कोई नया आउटपुट जोड़ते हैं तो एक नया कनेक्शन स्थापित करेगा।


क्लाइंट सर्वर को "I am CLIENT" स्ट्रिंग भेजेगा और उत्तर की प्रतीक्षा करेगा। सर्वर क्लाइंट के संदेश को पढ़ेगा, इसे टर्मिनल पर आउटपुट करेगा, और क्लाइंट को प्रतिक्रिया वापस भेजेगा।


पायथन सॉकेट उदाहरण

PubNub का उपयोग करके पायथन में सॉकेट प्रोग्रामिंग

अब तक, इस ट्यूटोरियल में सर्वर और क्लाइंट के बीच संदेशों का आदान-प्रदान शामिल है, लेकिन क्या होगा यदि आपको सीधे पायथन क्लाइंट के बीच संवाद करने की आवश्यकता है?


दो या दो से अधिक क्लाइंट उपकरणों के बीच सीधे डेटा भेजना मुश्किल है क्योंकि आपके उपकरणों की संख्या बढ़ने पर आप कई स्केलिंग और सुरक्षा संबंधी चिंताओं में भाग लेते हैं।


क्लाइंट-सर्वर आर्किटेक्चर का उपयोग आपके क्लाइंट-टू-क्लाइंट संचार को मॉडरेट और प्रबंधित करने के लिए किया जाता है। यदि आपके पास कोई वेब सर्वर नहीं है या आप अपने एप्लिकेशन की मांगों को पूरा करने के लिए अपने सर्वर के स्केलिंग के बारे में चिंतित हैं, तो आपको होस्ट किए गए, रीयल-टाइम संचार समाधान जैसे PubNub का विकल्प चुनना चाहिए।


पबनब के क्रॉस-प्लेटफ़ॉर्म एसडीके, जिसमें पायथन शामिल है, उपयोगकर्ताओं की पहचान कर सकते हैं और विशिष्ट चैनलों को संदेश भेज सकते हैं, जो केवल सब्सक्राइब किए गए क्लाइंट प्राप्त करेंगे।

क्लाइंट-टू-क्लाइंट पायथन सॉकेट प्रोग्रामिंग

तो, दो ग्राहकों के बीच सीधे संदेशों का आदान-प्रदान करने के लिए पहले प्रस्तुत किए गए साधारण ऐप को पबनब के साथ कैसे लिखा जाएगा? यह समझना आवश्यक है कि यद्यपि PubNub समापन बिंदुओं के बीच द्विदिश संदेश भेजने और प्राप्त करने के लिए 'प्रकाशन' और 'सदस्यता' आर्किटेक्चर (पब/उप) का उपयोग करता है, फिर भी यह दृश्यों के पीछे सॉकेट का उपयोग करता है। पबनब आपको पायथन नेटवर्क प्रोग्रामिंग के विवरण के बारे में चिंता किए बिना सॉकेट संचार का लाभ देता है और ऑपरेटिंग सिस्टम की परवाह किए बिना अपने ग्राहकों के बीच हमेशा कनेक्शन बनाए रखता है।


PubNub को परियोजना में एकीकृत करने के लिए, PubNub पैकेज को टर्मिनल में पाइप के साथ संस्थापित करें; यह आपको पबनब पायथन एसडीके का उपयोग करने और पबनब इंफ्रास्ट्रक्चर के साथ संवाद करने की अनुमति देगा।


 pip3 install 'pubnub>=7.1.0'


PubNub नेटवर्क से कनेक्ट होने और संचार करने के लिए आपको दो क्लाइंट बनाने होंगे। एक फ़ाइल pn_client_1.py बनाएँ और निम्न कोड जोड़ें:


 from pubnub.callbacks import SubscribeCallback from pubnub.enums import PNStatusCategory from pubnub.pnconfiguration import PNConfiguration from pubnub.pubnub import PubNub import time import os pnconfig = PNConfiguration() userId = os.path.basename(__file__) pnconfig.publish_key = 'demo' pnconfig.subscribe_key = 'demo' pnconfig.user_id = userId pnconfig.ssl = True pubnub = PubNub(pnconfig) def my_publish_callback(envelope, status): # Check whether request successfully completed or not if not status.is_error(): pass class MySubscribeCallback(SubscribeCallback): def presence(self, pubnub, presence): pass def status(self, pubnub, status): pass def message(self, pubnub, message): if message.publisher == userId : return print ("from device " + message.publisher + ": " + message.message) pubnub.add_listener(MySubscribeCallback()) pubnub.subscribe().channels("chan-1").execute() ## publish a message while True: msg = input("") if msg == 'exit': os._exit(1) pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)


फ़ाइल pn_client_2.py बनाएँ और वही कोड जोड़ें जो आपने pn_client_1.py के लिए उपयोग किया था

उपरोक्त कोड 'डेमो' कुंजियों का उपयोग करता है, लेकिन आप अपनी कस्टम PubNub कुंजियाँ निःशुल्क प्राप्त कर सकते हैं।


दो अलग-अलग टर्मिनल विंडो में एक साथ pn_client_1.py और pn_client_2.py दोनों चलाएँ


 python3 pn_client_1.py


 python3 pn_client_2.py


प्रत्येक क्लाइंट पबनब नेटवर्क से अपने कनेक्शन को इनिशियलाइज़ करता है और जब भी वे chan-1 चैनल पर प्रकाशित होते हैं तो नए संदेश प्राप्त करने के लिए सदस्यता लेते हैं। आप इसे पायथन में एक टीसीपी सॉकेट पर डेटा भेजने के रूप में सोच सकते हैं; पर्दे के पीछे, PubNub आपके लिए सॉकेट बना रहा है और उसका प्रबंधन कर रहा है और आपके संदेश को उन सभी ग्राहकों तक पहुँचा रहा है जो इसे सुन रहे हैं। एक बार दूरस्थ क्लाइंट संदेश प्राप्त कर लेता है, प्राप्त संदेश कमांड लाइन पर प्रदर्शित होता है।


पायथन पबनब उदाहरण


और इसके लिए बस इतना ही है! पबनब के साथ विकसित करने के बारे में अधिक जानकारी के लिए, हमारे ट्यूटोरियल्स की रेंज देखें। वैकल्पिक रूप से, यह समझने के लिए पबनब इंटरएक्टिव लाइव टूर देखें कि प्लेटफॉर्म अनुप्रयोगों को रीयल-टाइम अन्तरक्रियाशीलता कैसे प्रदान करता है। पबनब टीसीपी और यूडीपी डेटाग्राम संचार के साथ-साथ लिनक्स, यूनिक्स और विंडोज का समर्थन करता है।


यहां भी प्रकाशित: https://www.pubnub.com/blog/socket-programming-in-python-client-server-p2p/