पायथन 3 - नेटवर्क प्रोग्रामिंग

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

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

यह अध्याय आपको नेटवर्किंग - सॉकेट प्रोग्रामिंग में सबसे प्रसिद्ध अवधारणा पर एक समझ देता है।

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

सॉकेट्स एक द्विदिश संचार चैनल के समापन बिंदु हैं। सॉकेट्स एक प्रक्रिया के भीतर, एक ही मशीन पर प्रक्रियाओं के बीच, या विभिन्न महाद्वीपों पर प्रक्रियाओं के बीच संवाद कर सकते हैं।

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

सॉकेट्स की अपनी शब्दावली है -

अनु क्रमांक। शब्द और विवरण
1

domain

प्रोटोकॉल का परिवार जो परिवहन तंत्र के रूप में उपयोग किया जाता है। ये मान AF_INET, PF_INET, PF_UNIX, PF_X25, और इतने पर जैसे स्थिरांक हैं।

2

type

दो अंत बिंदुओं के बीच संचार का प्रकार, आमतौर पर कनेक्शन-उन्मुख प्रोटोकॉल के लिए SOCK_STREAM और कनेक्शन रहित प्रोटोकॉल के लिए SOCK_DGRAM।

3

protocol

आमतौर पर शून्य, इसका उपयोग किसी डोमेन और प्रकार के प्रोटोकॉल के एक प्रकार की पहचान करने के लिए किया जा सकता है।

4

hostname

नेटवर्क इंटरफ़ेस की पहचानकर्ता -

  • एक स्ट्रिंग, जो होस्ट नाम, डॉटेड-क्वाड एड्रेस या कोलोन में IPV6 एड्रेस (और संभवतः डॉट) हो सकता है

  • एक स्ट्रिंग "<प्रसारण>", जो एक INADDR_BROADCAST पते को निर्दिष्ट करता है।

  • एक शून्य-लंबाई वाली स्ट्रिंग, जो INADDR_ANY को निर्दिष्ट करती है, या

  • एक इंटीजर, जिसे बाइट ऑर्डर में एक बाइनरी एड्रेस के रूप में व्याख्या किया गया है।

5

port

प्रत्येक सर्वर एक या अधिक पोर्ट पर कॉल करने वाले क्लाइंट के लिए सुनता है। एक पोर्ट एक Fixnum पोर्ट नंबर, एक स्ट्रिंग जिसमें पोर्ट नंबर या सेवा का नाम हो सकता है।

सॉकेट मॉड्यूल

सॉकेट बनाने के लिए, आपको सॉकेट मॉड्यूल में उपलब्ध सॉकेट.सोकेट () फ़ंक्शन का उपयोग करना होगा , जिसमें सामान्य सिंटैक्स है -

s = socket.socket (socket_family, socket_type, protocol = 0)

यहाँ मापदंडों का वर्णन है -

  • socket_family - यह या तो AF_UNIX या AF_INET है, जैसा कि पहले बताया गया है।

  • socket_type - यह या तो SOCK_STREAM है या SOCK_DGRAM।

  • protocol - इसे आमतौर पर 0 से चूककर छोड़ दिया जाता है।

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

सर्वर सॉकेट विधियाँ

अनु क्रमांक। विधि और विवरण
1

s.bind()

यह विधि सॉकेट के पते (होस्टनाम, पोर्ट नंबर जोड़ी) को बांधती है।

2

s.listen()

यह विधि टीसीपी श्रोता को सेट और शुरू करती है।

3

s.accept()

यह टीसीपी क्लाइंट कनेक्शन को निष्क्रिय रूप से स्वीकार करता है, कनेक्शन आने तक (अवरुद्ध) होने तक प्रतीक्षा करता है।

ग्राहक सॉकेट तरीके

अनु क्रमांक। विधि और विवरण
1

s.connect()

यह विधि सक्रिय रूप से टीसीपी सर्वर कनेक्शन शुरू करती है।

सामान्य सॉकेट विधि

अनु क्रमांक। विधि और विवरण
1

s.recv()

यह विधि टीसीपी संदेश प्राप्त करती है

2

s.send()

यह विधि टीसीपी संदेश प्रसारित करती है

3

s.recvfrom()

यह विधि यूडीपी संदेश प्राप्त करती है

4

s.sendto()

यह विधि यूडीपी संदेश प्रसारित करती है

5

s.close()

यह विधि सॉकेट को बंद कर देती है

6

socket.gethostname()

होस्टनाम लौटाता है।

एक साधारण सर्वर

इंटरनेट सर्वर लिखने के लिए, हम उपयोग करते हैं socketसॉकेट ऑब्जेक्ट बनाने के लिए सॉकेट मॉड्यूल में उपलब्ध फ़ंक्शन। सॉकेट ऑब्जेक्ट का उपयोग सॉकेट सर्वर को सेटअप करने के लिए अन्य फ़ंक्शन को कॉल करने के लिए किया जाता है।

अब कॉल करें bind(hostname, port)दिए गए होस्ट पर आपकी सेवा के लिए एक पोर्ट निर्दिष्ट करने के लिए फ़ंक्शन ।

इसके बाद, दिए गए ऑब्जेक्ट की स्वीकार पद्धति को कॉल करें । यह विधि तब तक प्रतीक्षा करती है जब तक कोई क्लाइंट आपके द्वारा निर्दिष्ट पोर्ट से कनेक्ट नहीं होता है, और फिर एक कनेक्शन ऑब्जेक्ट देता है जो उस क्लाइंट के कनेक्शन का प्रतिनिधित्व करता है।

#!/usr/bin/python3           # This is server.py file
import socket                                         

# create a socket object
serversocket = socket.socket(
	        socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()                           

port = 9999                                           

# bind to the port
serversocket.bind((host, port))                                  

# queue up to 5 requests
serversocket.listen(5)                                           

while True:
   # establish a connection
   clientsocket,addr = serversocket.accept()      

   print("Got a connection from %s" % str(addr))
    
   msg = 'Thank you for connecting'+ "\r\n"
   clientsocket.send(msg.encode('ascii'))
   clientsocket.close()

एक साधारण ग्राहक

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

socket.connect(hosname, port )पोर्ट पर होस्टनाम के लिए एक टीसीपी कनेक्शन खोलता है । एक बार जब आपके पास एक सॉकेट खुला होता है, तो आप इसे किसी भी IO ऑब्जेक्ट की तरह पढ़ सकते हैं। जब किया जाता है, तो इसे बंद करना याद रखें, क्योंकि आप एक फ़ाइल बंद कर देंगे।

उदाहरण

निम्न कोड एक बहुत ही सरल क्लाइंट है जो किसी दिए गए होस्ट और पोर्ट से जुड़ता है, सॉकेट से किसी भी उपलब्ध डेटा को पढ़ता है, और फिर इसे हटा देता है -

#!/usr/bin/python3           # This is client.py file

import socket

# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# get local machine name
host = socket.gethostname()                           

port = 9999

# connection to hostname on the port.
s.connect((host, port))                               

# Receive no more than 1024 bytes
msg = s.recv(1024)                                     

s.close()
print (msg.decode('ascii'))

अब इस सर्वरहोम को बैकग्राउंड में रन करें और फिर रिजल्ट देखने के लिए उपरोक्त क्लाइंट को रन करें।

# Following would start a server in background.
$ python server.py & 

# Once server is started run client as follows:
$ python client.py

उत्पादन

इसका परिणाम निम्न होगा -

on server terminal
Got a connection from ('192.168.1.10', 3747)
On client terminal
Thank you for connecting

पायथन इंटरनेट मॉड्यूल

पायथन नेटवर्क / इंटरनेट प्रोग्रामिंग में कुछ महत्वपूर्ण मॉड्यूल की सूची नीचे दी गई है -

मसविदा बनाना सामान्य समारोह पोर्ट नं पायथन मॉड्यूल
एचटीटीपी वेब पृष्ठ 80 कैनप्लिब, यूरलिब, एक्सएमएलआरक्लिब
एनएनटीपी यूज़नेट न्यूज़ 119 nntplib
एफ़टीपी फ़ाइल स्थानांतरण 20 ftplib, urllib
एसएमटीपी ईमेल भेज रहा हूं 25 smtplib
पॉप 3 ईमेल ला रहा है 110 poplib
IMAP4 ईमेल ला रहा है 143 imaplib
टेलनेट कमांड लाइन 23 telnetlib
धानीमूष दस्तावेज़ स्थानांतरित करता है 70 गोर्फ़्लिब, यूरलिब

कृपया ऊपर उल्लिखित सभी पुस्तकालयों को एफ़टीपी, एसएमटीपी, पीओपी और आईएमएपी प्रोटोकॉल के साथ काम करने के लिए जांचें।

आगे की रीडिंग

यह सॉकेट प्रोग्रामिंग के साथ एक त्वरित शुरुआत थी। यह एक विशाल विषय है। अधिक विस्तार खोजने के लिए निम्न लिंक से गुजरने की सलाह दी जाती है -

  • यूनिक्स सॉकेट प्रोग्रामिंग ।

  • पायथन सॉकेट लाइब्रेरी और मॉड्यूल ।