पायथन सॉकेट फ़ाइल स्थानांतरण भेजें

Python Socket File Transfer Send



इस लेख का उद्देश्य सीखना है पायथन प्रोग्राम के माध्यम से नेटवर्क पर टेक्स्ट फ़ाइल कैसे स्थानांतरित करें? . यह फ़ाइल स्थानांतरण python3+ में सॉकेट प्रोग्रामिंग का उपयोग करने के लिए सर्वर क्लाइंट मॉडल पर आधारित है।

इस प्रोग्राम को चलाने के लिए मूल सेट अप आरेख यहां दिया गया है।









सरलता के लिए हम पूरे लेख में सिस्टम ए को ए_क्लाइंट और सिस्टम बी को बी_सर्वर कहेंगे।



फ़ाइल आवश्यकताएँ:

ज़रुरत है सर्वर.py और यह फाइल सर्वर सिस्टम पर मौजूद होनी चाहिए। हमारे मामले में server.py B_server सिस्टम पर होना चाहिए।





एक और दो फाइलें Client.py तथा नमूना.txt क्लाइंट सिस्टम पर मौजूद होना चाहिए। हमारे मामले में वे दो फाइलें A_client सिस्टम पर मौजूद होनी चाहिए।

धारणाएं:

यहाँ धारणाएँ हैं:



  • हमारे पास टर्मिनल एक्सेस के साथ दो लिनक्स सिस्टम होने चाहिए।
  • पसंदीदा लिनक्स स्वाद है उबंटू .
  • Python3 स्थापित किया जाना चाहिए।
  • दोनों Linux सिस्टम को एक दूसरे को पिंग करने में सक्षम होना चाहिए। उपयोग गुनगुनाहट पिंग की जाँच करने का आदेश।
  • एक सिस्टम को सर्वर के रूप में कार्य करना चाहिए और अन्य सिस्टम को एक विशेष समय पर क्लाइंट के रूप में कार्य करना चाहिए।

सीमाएं:

आगे बढ़ने से पहले हमें यह जान लेना चाहिए कि इस कार्यक्रम की कुछ सीमाएँ हैं।

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

आवश्यकताओं को स्थापित करें:

  • इस प्रोग्राम को आज़माने के लिए हमें कम से कम एक Linux सिस्टम की आवश्यकता है। लेकिन सिफारिश दो अलग-अलग लिनक्स सिस्टम का उपयोग करने की है जो नेटवर्क के माध्यम से जुड़े हुए हैं।
  • दो प्रणालियों को ईथरनेट या वाई-फाई या किसी अन्य कनेक्शन के माध्यम से जोड़ा जाना चाहिए।

सर्वर स्रोत कोड:

https://github.com/linuxhintcode/websamples/blob/master/python_send_file/server.py

ग्राहक स्रोत कोड:

https://github.com/linuxhintcode/websamples/blob/master/python_send_file/client.py

प्रोग्राम और अपेक्षित आउटपुट कैसे चलाएं:

यहां कार्यक्रम को निष्पादित करने के चरण दिए गए हैं।

Step1: B_server सिस्टम पर जाएं और एक टर्मिनल खोलें। टर्मिनल खोलने का शार्ट कट है Alt+Ctrl+t.

Step2: अब उस पथ पर जाएँ जहाँ server.py मौजूद है।

Step3: अब नीचे की तरह server.py रन करें

पायथन 3 सर्वर।पीयू

कोई त्रुटि नहीं होनी चाहिए और आपको नीचे प्रिंट देखना चाहिए

सर्वर पोर्ट पर सूचीबद्ध हो रहा है: 9898

कॉपी की गई फ़ाइल का नाम सर्वर साइड पर recv.txt होगा

Step4: अब A_client सिस्टम पर टर्मिनल खोलें।

Step5: उस पथ पर जाएँ जहाँ client.py और sample.txt मौजूद हैं।

Step6: अब नीचे की तरह client.py चलाएँ

पायथन 3 क्लाइंट।पीयू <बी_सर्वर सिस्टम आईपी>

हमने देखा है कि हमें सर्वर का आईपी पता जानने की जरूरत है। हम B_server सिस्टम का IP पता जानने के लिए नीचे दिए गए कमांड को निष्पादित कर सकते हैं।

ifconfig

अब A_client सिस्टम का आउटपुट इस तरह होना चाहिए

################# सर्वर से नीचे संदेश प्राप्त हुआ है #################
| --------------------------------- |
नमस्ते ग्राहक[आईपी ​​​​पता: 192.168.1.102],
**सर्वर में आपका स्वागत है**
-सर्वर
| --------------------------------- |

Step7: अब B_server पर जाएं और नीचे दिए गए आउटपुट को देखें

फ़ाइल को सफलतापूर्वक कॉपी किया गया है
सर्वर ने कनेक्शन बंद कर दिया

Step8: सर्वर फ़ोल्डर में एक फ़ाइल नाम recv.txt होना चाहिए। इस recv.txt की सामग्री समान sample.txt होनी चाहिए।

इसलिए हमने पाइथन प्रोग्राम के माध्यम से क्लाइंट से सर्वर पर नेटवर्क पर फ़ाइल की सफलतापूर्वक प्रतिलिपि बनाई है।

कोड स्पष्टीकरण:

दो पायथन फाइलें हैं सर्वर.py तथा Client.py .

ध्यान दें कि हम एक बार बताएंगे कि क्या server.py और client.py के अंदर कोई कोड समान है।

  1. server.py:
#!/usr/bin/env python3

यह शेबैंग लाइन है जिसका अर्थ है कि डिफ़ॉल्ट रूप से इस server.py को python3 का उपयोग करना चाहिए। आइए देखते हैं इस लाइन का एक फायदा।

हमने server.py या client.py जैसे निष्पादित किया है अजगर3. अब हम python3 का उपयोग किए बिना अजगर फ़ाइल को निष्पादित कर सकते हैं। नीचे दिए गए आदेशों का पालन करें

सुपर यूजर मोड पर जाएं:

इसका

.py फ़ाइल को सभी अनुमति दें:

चामोद777सर्वर।पीयू

सर्वर.py चलाएँ:

./ सर्वर।पीयू आयात सॉकेट
आयात कर रहा हैसॉकेटअजगर कार्यक्रम में पुस्तकालयजैसाहम जा रहे है
उपयोग करने के लिएसॉकेट के लियेकनेक्शन।

एस = सॉकेट.सॉकेट()

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

बंदरगाह= 9898

अब हम एक पोर्ट चुनते हैं जहां सर्वर सुन रहा होगा। हम इसके बजाय गैर आरक्षित पोर्ट का उपयोग कर सकते हैं।

एस।बाँध(('',बंदरगाह))

हम सर्वर आईपी एड्रेस को उस पोर्ट [9898] से बाइंड करने के लिए बाइंड मेथड का इस्तेमाल करते हैं। एक अवलोकन यह है कि हम बाइंड विधि के पहले तर्क के स्थान पर सर्वर के सटीक आईपी पते का उपयोग कर सकते थे लेकिन हम इस काम के ठीक होने के कारण खाली छोड़ना चुनते हैं।

एस।बाँध((आईपी ​​पता,बंदरगाह))
फ़ाइल = खोलना('recv.txt', 'डब्ल्यूबी')

हमने सर्वर में राइट मोड के लिए एक फ़ाइल नाम recv.txt खोला है और फ़ाइल पॉइंटर मिला है। यह आवश्यक है क्योंकि हमें क्लाइंट से एक टेक्स्ट फ़ाइल कॉपी करनी होती है।

जबकि सत्य:

आइए एक अनंत शुरू करें जबकि सर्वर के काम के रूप में लूप तब तक इंतजार करना है जब तक कि क्लाइंट उस 9898 पोर्ट पर सर्वर के साथ संचार न करे। तो यह जबकि लूप की आवश्यकता है।

कॉन,=एस।स्वीकार करना()

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

एमएसजी= 'एनएन| --------------------------------- |एनहाय क्लाइंट [आईपी पता:
'
+ अतिरिक्त[0]+'],एन**सर्वर में आपका स्वागत है**एन-सर्वरएन
| --------------------------------- |एन एनएन'

यह कोड क्लाइंट को भेजने के लिए एक संदेश बनाने के लिए है। यह संदेश क्लाइंट टर्मिनल पर मुद्रित होना चाहिए। यह पुष्टि करता है कि क्लाइंट सर्वर के साथ संचार करने में सक्षम है।

कॉन।भेजना(संदेशएन्कोड())

अब हमारे पास संदेश तैयार है, और उसके बाद इसे क्लाइंट को भेजें कॉन। यह कोड वास्तव में क्लाइंट को संदेश भेजता है।

रिकवडाटा=कॉन।आरईवीवी(१०२४)

यह कोड क्लाइंट साइड से भेजे गए किसी भी डेटा को प्राप्त कर रहा है। हमारे मामले में हम sample.txt की सामग्री की उम्मीद कर रहे हैं रिकवडाटा .

जबकिरिकवडाटा:

एक और जबकि शर्त के साथ लूप RecvData खाली नहीं है। हमारे मामले में यह खाली नहीं है।

फ़ाइल.लिखो(रिकवडाटा)

एक बार हमारे अंदर सामग्री हो जाए रिकवडाटा तो हम उस फाइल को लिख रहे हैं recv.txt फ़ाइल सूचक का उपयोग करना फ़ाइल।

रिकवडाटा=कॉन।आरईवीवी(१०२४)

क्लाइंट से कोई डेटा होने पर फिर से प्राप्त करने का प्रयास कर रहा है। एक बार रिकवडाटा कोई डेटा नहीं है, जबकि कोड लूप को तोड़ देगा।

फ़ाइल.बंद करे()

यह फ़ाइल पॉइंटर को बंद कर देगा जैसा कि हम फ़ाइल लिखने के साथ कर रहे हैं।

कॉन।बंद करे()

यह क्लाइंट के साथ कनेक्शन बंद कर देगा।

टूटना

यह अनंत से बाहर आना है जबकि B_server पर लूप।

  1. Client.py:
आयात sys

sys पुस्तकालय आयात करना क्योंकि हम अजगर में तर्क सुविधा का उपयोग करना चाहते हैं।

अगर (लेन(sys.अर्जीवी) > 1):
सर्वर आईपी= sys.अर्जीवी[1]
अन्यथा:
प्रिंट('एनएनइस तरह भागोएनpython3 क्लाइंट.pyएनएन')
बाहर जाएं(1)

जैसे ही हम फ़ाइल नाम client.py के बाद B_server का IP पता पास करते हैं, हमें क्लाइंट के अंदर उस सर्वर IP पते को पकड़ने की आवश्यकता होती है।

…..if (len(sys.argv) > 1): => यह सुनिश्चित करने के लिए कि उपयोगकर्ता आईपी पते के रूप में कम से कम एक तर्क पारित करता है और उस आईपी पते को पकड़ता है सर्वर आईपी।

यदि उपयोगकर्ता कम से कम एक तर्क कोड पास नहीं करता है तो मदद दिखाता है और कोड से बाहर आता है।

बंदरगाह= 9898

यह वही पोर्ट होना चाहिए जैसा कि B_server साइड में बताया गया है।

एस।जुडिये((सर्वर आईपी,बंदरगाह))

यह कोड उस पोर्ट के साथ सर्वर आईपी से टीसीपी कनेक्शन करेगा। इस बिंदु पर कुछ भी गलत होने पर कनेक्शन में विफलता होती है।

फ़ाइल = खोलना('नमूना.txt', 'आरबी')

हम केवल सामग्री पढ़ने के लिए नमूना.txt को रीड मोड में खोल रहे हैं।

डेटा भेजें= फ़ाइल.पढ़ना(१०२४)

फ़ाइल की सामग्री को पढ़ना और अंदर डालना डेटा भेजें चर।

जबकिडेटा भेजें:

हम एक समय लूप शुरू कर रहे हैं if डेटा भेजें डेटा है। हमारे मामले में यदि sample.txt खाली नहीं है तो उसके पास डेटा होना चाहिए।

एस।भेजना(डेटा भेजें)

अब हम की सामग्री भेज सकते हैं नमूना.txt सॉकेट ऑब्जेक्ट का उपयोग कर सर्वर के लिए एस।

डेटा भेजें= फ़ाइल.पढ़ना(१०२४)

अगर कुछ बचा है तो फिर से पढ़ना। तो फ़ाइल से पढ़ने के लिए कुछ नहीं होगा डेटा भेजें खाली होगा और यह लूप से बाहर आ जाएगा।

एस।बंद करे()

यह क्लाइंट साइड से कनेक्शन बंद नहीं है।

उबंटू स्क्रीनशॉट सर्वर साइड

उबंटू स्क्रीनशॉट क्लाइंट साइड

परीक्षण संयोजन:

  • सर्वर के रूप में Linux और क्लाइंट के रूप में Linux: PASS
  • क्लाइंट के रूप में Linux और सर्वर के रूप में Linux: PASS
  • सर्वर के रूप में Linux और क्लाइंट के रूप में Windows10: PASS
  • क्लाइंट के रूप में Linux और सर्वर के रूप में Windows10: PASS

सर्वर और क्लाइंट के लिए दो लिनक्स सिस्टम का उपयोग करने की सिफारिश की गई है।

अपेक्षित त्रुटियाँ:

  1. यदि सर्वर 9898 पोर्ट पर नहीं चल रहा है तो आप नीचे त्रुटि देख सकते हैं

ट्रेसबैक (सबसे हालिया कॉल अंतिम):

फ़ाइल'client.py',रेखा22, में <मापांक>
एस।जुडिये((सर्वर आईपी,बंदरगाह))
कनेक्शन अस्वीकृत त्रुटि:[एर्नो111]कनेक्शन नहीं हो सका
  1. यदि क्लाइंट साइड पर आईपी एड्रेस पास नहीं किया जाता है तो नीचे त्रुटि दिखाई देती है

इस तरह भागो

पायथन 3 क्लाइंट।पीयू <सर्वर आईपी पता>
  1. नीचे त्रुटि दिखाई देती है यदि 1अनुसूचित जनजातिग्राहक पक्ष में तर्क एक आईपी पता नहीं है

ट्रेसबैक (सबसे हालिया कॉल अंतिम):

फ़ाइल'client.py',रेखा22, में <मापांक>
एस।जुडिये((सर्वर आईपी,बंदरगाह))
सॉकेट.गैरोर:[एर्नो -2]नामयासेवानहींज्ञात
  1. यदि पोर्ट 98980 की तरह उपयोग किया जाता है तो नीचे त्रुटि दिखाई देती है

ट्रेसबैक (सबसे हालिया कॉल अंतिम):

फ़ाइल'client.py',रेखा22, में <मापांक>
एस।जुडिये((सर्वर आईपी,बंदरगाह))
अतिप्रवाह त्रुटि: getockaddrarg: पोर्ट होना चाहिए0-65535.
  1. यदि क्लाइंट साइड पर sample.txt मौजूद नहीं है तो नीचे त्रुटि दिखाई देती है।

ट्रेसबैक (सबसे हालिया कॉल अंतिम):

फ़ाइल'client.py',रेखा25, में <मापांक>
फ़ाइल = खोलना('नमूना.txt', 'आरबी')
फ़ाइल नॉटफाउंड त्रुटि:[एर्नो2]ऐसा कुछ नहीफ़ाइल यानिर्देशिका:'नमूना.txt'

निष्कर्ष:

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