पायथन में सॉकेट प्रोग्रामिंग क्या है और इसे कैसे मास्टर करना है?



जानें कि पायलेट और सॉकेट का उपयोग करके अजगर वस्तुओं को स्थानांतरित करने के साथ क्लाइंट-सर्वर संचार के साथ पायथन में सॉकेट प्रोग्रामिंग क्या है।

इंटरनेट निर्विवाद रूप से has सोल ऑफ़ एक्सिस्टेंस ’बन गया है और इसकी गतिविधि‘ कनेक्शन्स ’या i नेटवर्क्स’ की विशेषता है। ये नेटवर्क सबसे महत्वपूर्ण बुनियादी बातों में से एक का उपयोग करके संभव बनाया गया है सॉकेट्स। इस लेख में पायथन में सॉकेट प्रोग्रामिंग से जुड़े सभी क्षेत्रों को शामिल किया गया है। सॉकेट्स आपको ये कनेक्शन बनाने में मदद करते हैं, जबकि , निस्संदेह, यह आसान बनाता है।

आइए इस लेख में शामिल सभी विषयों पर एक नज़र डालें:





सॉकेट्स का उपयोग क्यों करें?
अजगर में सॉकेट्स क्या हैं?
पायथन में सॉकेट प्रोग्रामिंग कैसे प्राप्त करें
सर्वर क्या है?
ग्राहक क्या है?
इको क्लाइंट-सर्वर
एकाधिक संचार
अजगर वस्तुओं को स्थानांतरित करना



सॉकेट्स का उपयोग क्यों करें?

सॉकेट नेटवर्किंग की रीढ़ हैं। वे दो अलग-अलग कार्यक्रमों या उपकरणों के बीच सूचना के हस्तांतरण को संभव बनाते हैं। उदाहरण के लिए, जब आप अपना ब्राउज़र खोलते हैं, तो आप क्लाइंट के रूप में सूचना के हस्तांतरण के लिए सर्वर से एक कनेक्शन बना रहे हैं।

इस संचार में गहराई से गोता लगाने से पहले, आइए जानें कि ये सॉकेट वास्तव में क्या हैं।

सॉकेट्स क्या हैं?

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




सामान्य पोर्ट्स-सॉकेटप्रोग्रामोमिंगपाइथन-एडुरेका

अब जब आप सॉकेट की अवधारणा के बारे में स्पष्ट हो गए हैं, तो आइए अब पायथन के सॉकेट मॉड्यूल पर एक नज़र डालें:

पायथन में सॉकेट प्रोग्रामिंग कैसे प्राप्त करें:

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

कुछ महत्वपूर्ण विधियाँ इस प्रकार हैं:

तरीकेविवरण

सॉकेट.स्कैट ()

सॉकेट बनाने के लिए उपयोग किया जाता है (सॉकेट बनाने के लिए क्लाइंट और सर्वर दोनों के लिए आवश्यक है)

सॉकेट.सेप्ट ()

जावा में दो संख्याओं का जोड़
एक कनेक्शन स्वीकार करते थे। यह मूल्यों (युग्म, पता) की एक जोड़ी लौटाता है, जहां डेटा भेजने या प्राप्त करने के लिए कॉन एक नया सॉकेट ऑब्जेक्ट है और कनेक्शन के दूसरे छोर पर मौजूद सॉकेट का पता है

सॉकेट.बिंद ()

एक पैरामीटर के रूप में निर्दिष्ट पते पर बांधने के लिए उपयोग किया जाता है

सॉकेट.क्लोज ()

बंद के रूप में सॉकेट को चिह्नित करने के लिए उपयोग किया जाता है

सॉकेट.कनेक्ट ()

पैरामीटर के रूप में निर्दिष्ट एक दूरस्थ पते से कनेक्ट करने के लिए उपयोग किया जाता है

सॉकेट.लिस्टन ()

सर्वर को कनेक्शन स्वीकार करने में सक्षम बनाता है

अब जब आप सॉकेट मॉड्यूल के महत्व को समझ गए हैं, तो आइए देखें कि सॉकेट प्रोग्राम के लिए सर्वर और क्लाइंट बनाने के लिए यह कैसे काम कर सकता है। ।

एक सर्वर क्या है?

एक सर्वर या तो एक प्रोग्राम, एक कंप्यूटर, या एक उपकरण है जो नेटवर्क संसाधनों के प्रबंधन के लिए समर्पित है। सर्वर या तो एक ही डिवाइस या कंप्यूटर पर हो सकता है या स्थानीय रूप से अन्य उपकरणों और कंप्यूटरों से या यहां तक ​​कि रिमोट से भी जुड़ा हो सकता है। डेटाबेस सर्वर, नेटवर्क सर्वर, प्रिंट सर्वर आदि जैसे विभिन्न प्रकार के सर्वर हैं।

आमतौर पर सर्वर एक कनेक्शन स्थापित करने और ग्राहकों को बांधने के लिए सॉकेट.सोकेट (), सॉकेट.बिंद (), सॉकेट.लिस्टेन (), आदि तरीकों का उपयोग करते हैं। अब एक सर्वर बनाने के लिए एक प्रोग्राम लिखें। निम्नलिखित उदाहरण पर विचार करें:

उदाहरण:

इंपोर्ट सॉकेट s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 1234)) #port संख्या 0-5,535 के बीच कुछ भी हो सकती है (हम आमतौर पर गैर-प्रचलित पोर्ट निर्दिष्ट करते हैं जो कि हैं > 1023) s.listen (5) जबकि True: clt, adr = s.accept () प्रिंट (f'Connection to {adr} स्थापित ') #f स्ट्रिंग शाब्दिक स्ट्रिंग f के साथ उपसर्गित है, जिसमें ब्रेसिज़ clt के अंदर # python अभिव्यक्तियाँ होती हैं। .send (बाइट्स ('पायथन में सॉकेट प्रोग्रामिंग', 'utf-8')) #to ग्राहक को जानकारी भेजें

जैसा कि आप देख सकते हैं, सॉकेट बनाने के लिए पहली आवश्यकता सॉकेट मॉड्यूल को आयात करना है। उसके बाद एक सर्वर-साइड सॉकेट बनाने के लिए socket.socket () विधि का उपयोग किया जाता है।

ध्यान दें:

AF_INET इंटरनेट से पते को संदर्भित करता है और इसके लिए (होस्ट, पोर्ट) की एक जोड़ी की आवश्यकता होती है जहां होस्ट या तो किसी विशेष वेबसाइट का URL हो सकता है या उसका पता और पोर्ट नंबर एक पूर्णांक है। SOCK_STREAM का उपयोग TCP प्रोटोकॉल बनाने के लिए किया जाता है।

बाइंड () पद्धति दो मापदंडों को एक टपल (मेजबान, बंदरगाह) के रूप में स्वीकार करती है। हालाँकि, 4-अंकीय पोर्ट संख्याओं का उपयोग करना बेहतर है क्योंकि निचले हिस्से आमतौर पर व्याप्त होते हैं। सुनो () विधि सर्वर को कनेक्शन स्वीकार करने की अनुमति देती है। यहाँ, 5 एक साथ आने वाले कई कनेक्शनों की कतार है। यहां निर्दिष्ट किया जा सकता न्यूनतम मान 0 है (यदि आप कम मूल्य देते हैं, तो यह 0 में बदल जाता है)। यदि कोई पैरामीटर निर्दिष्ट नहीं है, तो यह डिफ़ॉल्ट रूप से उपयुक्त है।

c ++ एक सरणी को सॉर्ट करता है

द हमेशा के लिए कनेक्शन स्वीकार करने की अनुमति देता है। ‘Clt’ और ‘adr’ क्लाइंट ऑब्जेक्ट और एड्रेस हैं। प्रिंट स्टेटमेंट सिर्फ एड्रेस और क्लाइंट सॉकेट के पोर्ट नंबर को प्रिंट करता है। अंत में, बाइट्स में डेटा भेजने के लिए clt.send का उपयोग किया जाता है।

अब जब हमारा सर्वर सेट हो गया है, तो हम क्लाइंट की ओर बढ़ते हैं।

क्लाइंट क्या है?

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

अब ग्राहक-साइड प्रोग्राम को कैसे कोड करें, इस पर एक नज़र डालते हैं :

उदाहरण:

इंपोर्ट सॉकेट s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((सॉकेट.gethostname), 2346)) msg ​​= s.recv (1024) प्रिंट (msg.decode ('utf-8')) )

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


ध्यान दें: क्लाइंट और सर्वर एक ही कंप्यूटर पर होने पर gethostname का उपयोग किया जाता है। (LAN - लोकलिप / वैन - पब्लिकिप)

यहां, क्लाइंट सर्वर से कुछ जानकारी प्राप्त करना चाहता है और इसके लिए, आपको recv () विधि का उपयोग करने की आवश्यकता है और जानकारी को अन्य चर संदेश में संग्रहीत किया जाता है। बस यह ध्यान रखें कि पास की जा रही जानकारी बाइट्स में होगी और उपरोक्त प्रोग्राम में क्लाइंट एक ही ट्रांसफर में 1024 बाइट्स (बफर साइज) प्राप्त कर सकता है। यह हस्तांतरित की जा रही जानकारी के आधार पर किसी भी राशि के लिए निर्दिष्ट किया जा सकता है।

अंत में, स्थानांतरित किए जा रहे संदेश को डिकोड और प्रिंट किया जाना चाहिए।

अब जब आप क्लाइंट-सर्वर प्रोग्राम बनाने के बारे में जानते हैं, तो चलिए देखते हैं कि उन्हें कैसे निष्पादित करने की आवश्यकता है।

इको क्लाइंट-सर्वर:

इन कार्यक्रमों को निष्पादित करने के लिए, अपना कमांड प्रॉम्प्ट खोलें, उस फ़ोल्डर में जाएं जहां आपने अपना क्लाइंट और सर्वर प्रोग्राम बनाया है और फिर टाइप करें:

py server.py (यहाँ, server.py सर्वर का फ़ाइल नाम है, आप py -3.7 server.py भी उपयोग कर सकते हैं)

एक बार जब यह किया जाता है, तो सर्वर चलने लगता है। क्लाइंट निष्पादित करने के लिए, एक और cmd विंडो खोलें, और टाइप करें:

py client.py (यहाँ, client.py ग्राहक का फ़ाइल नाम है)

OUTPUT (सर्वर):

(ग्राहक)

आइए एक ही प्रोग्राम को बफर साइज़ को 7 पर कम करके देखें और देखें कि हमें क्या आउटपुट मिलता है:

OUTPUT:

एक वर्ग जावा का उदाहरण

जैसा कि आप देख सकते हैं, 7 बाइट्स को स्थानांतरित करने के बाद कनेक्शन समाप्त हो गया है। लेकिन यह एक मुद्दा है क्योंकि आपको पूरी जानकारी नहीं मिली है और कनेक्शन बंद है। इस समस्या को हल करने के लिए चलें।

एकाधिक संचार:

जब तक ग्राहक पूरी जानकारी प्राप्त नहीं कर लेता, तब तक आप लूप का उपयोग कर सकते हैं:

उदाहरण:

आयात सॉकेट s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)) जबकि True: msg = s.rerev (7) प्रिंट (msg.decode ('utf-) 8 '))

एक बार जब आप ऐसा कर लेते हैं, तो पूरा संदेश 7 बाइट्स प्रति हस्तांतरण में प्राप्त होगा।

लेकिन इस बार, जैसा कि आप देख सकते हैं, कनेक्शन समाप्त नहीं हुआ है और आपको कभी नहीं पता कि यह कब होने वाला है। और इस पर जोड़ने के लिए, क्या होगा यदि आप वास्तव में यह नहीं जानते कि सर्वर से क्लाइंट को प्राप्त होने वाला संदेश या जानकारी कितनी बड़ी है। ऐसे मामलों में, आप वास्तव में क्लाइंट साइड पर निम्न बिट कोड का उपयोग कर सकते हैं:

उदाहरण:

पूरा_इनफो = '' ट्रू: मेस = s.recv (7) अगर लेन (संदेश)<=0: break complete_info += msg.decode('utf-8') print(complete_info) 

सर्वर साइड में क्लोज () विधि का उपयोग इस प्रकार है:

clt.close ()

इसका उत्पादन नीचे दी गई छवि के अनुसार दिखाया जाएगा:

OUTPUT:



कोड के सभी उपरोक्त ब्लॉक करता है, सूचना के आकार की जांच करना और एक बार में दो बाइट्स के बफर में प्रिंट करना और इसके पूरा होने के बाद कनेक्शन बंद करना।

अजगर वस्तुओं को स्थानांतरित करना:

यहाँ तक आपको स्ट्रिंग्स को स्थानांतरित करने की आदत है। लेकिन, सॉकेट प्रोग्रामिंग में अजगर आपको पायथन वस्तुओं को भी स्थानांतरित करने की अनुमति देता है। ये ऑब्जेक्ट कुछ भी हो सकते हैं जैसे सेट, ट्यूपल्स, डिक्शनरी आदि। इसे प्राप्त करने के लिए, आपको पायथन के अचार मॉड्यूल को आयात करना होगा।

पायथन अचार मॉड्यूल:

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

उदाहरण:

आयात अचार mylist = [1,2, 'abc'] mymsg = pickle.dumps (mylist) प्रिंट (myms)

OUTPUT: b'x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e। '

जैसा कि आप देख सकते हैं, उपरोक्त कार्यक्रम में, ’mylist’ अचार मॉड्यूल के डंप () फ़ंक्शन का उपयोग करके क्रमबद्ध है। यह भी नोट करें कि आउटपुट a b ’से शुरू होता है, जिसका अर्थ है कि यह बाइट्स में बदल गया है। सॉकेट प्रोग्रामिंग में, आप इस मॉड्यूल को स्थानांतरित करने के लिए कार्यान्वित कर सकते हैं अजगर वस्तुओं क्लाइंट और सर्वर के बीच।

अजगर ऑब्जेक्ट संरचनाओं को स्थानांतरित करने के लिए अचार मॉड्यूल का उपयोग कैसे करें?

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

सर्वर साइड:

आयात सॉकेट आयात अचार a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 2133)) #bb tuple s.listen (5) जबकि True: clt, adr। = s.accept () प्रिंट (f'Connection to {adr} स्थापित ') m = {1:' ग्राहक ', 2:' सर्वर '} mymsg = pickle.dumps (m) # जिस संदेश को हम बाद में प्रिंट करना चाहते हैं, उसे amsg = {len (mymsg): {a}} 'utf-8') + mymsg clt.send (mymsg)

यहाँ, m एक शब्दकोश है जो मूल रूप से एक है जिसे सर्वर से क्लाइंट को भेजना होगा। यह पहले डंप () का उपयोग करके ऑब्जेक्ट को क्रमबद्ध करके और फिर इसे बाइट में परिवर्तित करके किया जाता है।
अब ग्राहक-पक्ष प्रतिपक्ष को लिखें:

ग्राहक की ओर:

आयात सॉकेट आयात अचार a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2133)) जबकि True: full_info = b 'rec_msg = True जबकि True: mymsg = s.recv (10) यदि rec_msg: प्रिंट (संदेश की लंबाई = {mymsg [: a]}) x = int (mymsg [: a]) rec_msg = पूर्ण पूर्णांक + = mymsg अगर len (पूर्ण_इन्फो) -a == x: प्रिंट ('पूरी जानकारी प्राप्त की') प्रिंट (पूर्ण_इंफो [a]]) m = अचार। लोड (पूर्ण_इन्फो [a]]) प्रिंट (एम) rec_msg = सही पूर्ण_ऑन्फो = बी '' प्रिंट (पूर्ण_इन्फो) )

पहली बार लूप हमें पूर्ण संदेश (पूर्ण_इनफो) के साथ-साथ बफर का उपयोग करके प्राप्त होने वाले संदेश (rec_msg) पर नज़र रखने में मदद करेगा। संदेश को rec_ सेट करके
फिर, जब संदेश प्राप्त किया जा रहा है, मैं जो कुछ कर रहा हूं, वह प्रत्येक बिट को प्रिंट कर रहा है, आकार 10 के बफर में प्राप्त किया जा रहा है। यह आकार आपकी व्यक्तिगत पसंद के आधार पर कुछ भी हो सकता है।

फिर, यदि प्राप्त हुआ संदेश पूर्ण संदेश के बराबर है, तो मैं केवल उस संदेश को प्रिंट कर रहा हूं, जिसके बाद मुझे पूरी जानकारी प्राप्त हुई है जिसके बाद मैंने लोड () का उपयोग करके संदेश को डी-सीरियल किया है।

उपरोक्त कार्यक्रम का आउटपुट निम्नानुसार है:

यह हमें पायथन में सॉकेट प्रोग्रामिंग पर इस लेख के अंत में लाता है। मुझे उम्मीद है कि आप सभी अवधारणाओं को स्पष्ट रूप से समझ गए होंगे।

सुनिश्चित करें कि आप जितना संभव हो उतना अभ्यास करें और अपने अनुभव को वापस लाएं।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस 'सॉकेट प्रोग्रामिंग इन पाइथन' ब्लॉग के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।

अपने विभिन्न अनुप्रयोगों के साथ अजगर पर गहराई से ज्ञान प्राप्त करने के लिए, आप लाइव के लिए नामांकन कर सकते हैं 24/7 समर्थन और आजीवन पहुंच के साथ।