पायथन के मानक पुस्तकालय में 'सॉकेट' मॉड्यूल परिभाषित करता है कि ऑपरेटिंग सिस्टम के शीर्ष पर सॉकेट एंडपॉइंट का उपयोग करके सर्वर और क्लाइंट मशीन कैसे संचार कर सकते हैं। 'सॉकेट' एपीआई में कनेक्शन-उन्मुख और कनेक्शन रहित नेटवर्क प्रोटोकॉल दोनों के लिए कार्य शामिल हैं।
सॉकेट दो-तरफा संचार लिंक का अंतिम बिंदु है। यह आईपी पते और पोर्ट नंबर की विशेषता है। कनेक्शन शुरू करने के लिए दोनों सिरों पर सॉकेट का उचित विन्यास आवश्यक है। इससे आने वाले संदेशों को सुनना और फिर क्लाइंट-सर्वर वातावरण में प्रतिक्रियाएं भेजना संभव हो जाता है।
'सॉकेट' मॉड्यूल में सॉकेट () फ़ंक्शन एक सॉकेट ऑब्जेक्ट सेट करता है।
import socket obj = socket.socket(family, type, protocol)
डिफ़ॉल्ट रूप से 'परिवार' तर्क AF_INET है। अन्य स्वीकार्य मान हैं:AF_INET6, AF_UNIX, AF_CAN या AF_RDS। 'प्रकार' तर्क का मान डिफ़ॉल्ट रूप से 'SOCK_STREAM' है जो कनेक्शन-उन्मुख प्रोटोकॉल (टीसीपी) को दर्शाता है। कनेक्शन रहित प्रोटोकॉल (यूडीपी) के लिए इसे 'SOCK_DGRAM' पर सेट करें। 'प्रोटोकॉल' तर्क आमतौर पर डिफ़ॉल्ट रूप से 0 पर सेट होता है।
सर्वर और क्लाइंट पर सॉकेट ऑब्जेक्ट को क्रमशः सर्वर सॉकेट और क्लाइंट सॉकेट कहा जाता है। सॉकेट ऑब्जेक्ट निम्नलिखित विधियों को लागू करता है
बाइंड () | यह विधि सॉकेट को निर्दिष्ट आईपी पते और पोर्ट नंबर से बांधती है। |
सुनो () | यह विधि सर्वर शुरू करती है और क्लाइंट से कनेक्शन अनुरोध की तलाश में एक सुनने वाले लूप में चलती है। |
स्वीकार करें () | जब सर्वर द्वारा कनेक्शन अनुरोध को इंटरसेप्ट किया जाता है, तो यह विधि इसे स्वीकार करती है और क्लाइंट सॉकेट को उसके पते से पहचानती है। |
विशिष्ट सर्वर साइड कोड होगा
import socket ss = socket.socket() ss.bind(('localhost',12345)) ss.listen() client, addr = ss.accept() print ("connection request from: " + str(addr))
यदि स्थानीय मशीन का उपयोग सर्वर के रूप में क्लाइंट के समान मशीन से आने वाले संदेशों को सुनने के लिए किया जाता है, तो इसका आईपी पता '127.0.0.1' है जिसे लूप बैक एड्रेस भी कहा जाता है। इसे 'लोकलहोस्ट' के होस्टनाम से पहचाना जाता है। सॉकेट को मनमाना खाली पोर्ट नंबर पर सुनने के लिए बनाया गया है। नेटवर्क में दूरस्थ मशीनों के बीच संचार के लिए, वास्तविक आईपी पते का उपयोग किया जाना चाहिए।
क्लाइंट सॉकेट अपने आईपी पते और पोर्ट नंबर पर सुनने वाले सर्वर सॉकेट को कनेक्शन अनुरोध भेजता है
कनेक्ट ()
obj = socket.socket() obj.connect((host,port))
एक बार क्लाइंट से कनेक्शन अनुरोध सर्वर द्वारा स्वीकार कर लिया जाता है, दोनों सॉकेट ऑब्जेक्ट अब टीसीपी प्रोटोकॉल का उपयोग करके जुड़े हुए हैं और वे डेटा भेज और/या प्राप्त कर सकते हैं।
भेजें ()
सर्वर उस पते का उपयोग करके क्लाइंट को डेटा भेजता है जिसे उसने इंटरसेप्ट किया है।
client.send(bytes)
क्लाइंट सॉकेट उस सॉकेट को डेटा भेजता है जिसके साथ उसने संबंध स्थापित किया है।
obj.send(bytes)
भेजें ()
भेजने के समान ()। यह विधि तब तक डेटा भेजती रहती है जब तक या तो सभी डेटा नहीं भेज दिया जाता है।
भेजें ()
इस पद्धति का उपयोग केवल यूडीपी प्रोटोकॉल के मामले में किया जाना है।
recv()
इस विधि का उपयोग क्लाइंट को भेजे गए डेटा को पुनः प्राप्त करने के लिए किया जाता है। सर्वर के मामले में, यह रिमोट सॉकेट का उपयोग करता है जिसका अनुरोध स्वीकार कर लिया गया है।
client.recv(bytes)
ग्राहक के मामले में,
obj.recv(bytes)
recvfrom()
इस पद्धति का उपयोग यूडीपी प्रोटोकॉल के मामले में किया जाता है।
सर्वर कोड
import socket host = "127.0.0.1" port = 12345 ss = socket.socket() ss.bind((host,port)) ss.listen() cs, addr = server.accept() print ("Connection from: " + str(addr)) while True: data = cs.recv(1024).decode() if not data: break print ("from connected user: " + str(data)) print ("Received from User: " + str(data)) data = input("type message: ") conn.send(data.encode()) cs.close()
क्लाइंट कोड
import socket host = '127.0.0.1' port = 12345 obj = socket.socket() obj.connect((host,port)) message = input("type message: ") while message != 'q': obj.send(message.encode()) data = obj.recv(1024).decode() print ('Received from server: ' + data) message = input("type message: ") obj.close()
दो कमांड प्रॉम्प्ट विंडो खोलें। एक रन में पहले सर्वर कोड। अन्य रन क्लाइंट कोड में।