ازگر ساکٹ فائل ٹرانسفر بھیجیں۔

Python Socket File Transfer Send



اس مضمون کا مقصد سیکھنا ہے۔ ازگر پروگرام کے ذریعے نیٹ ورک پر ٹیکسٹ فائل کو کیسے منتقل کیا جائے۔ . یہ فائل ٹرانسفر python3+میں ساکٹ پروگرامنگ استعمال کرنے کے لیے سرور کلائنٹ ماڈل پر مبنی ہے۔

اس پروگرام کو چلانے کے لیے بنیادی سیٹ اپ ڈایاگرام ہے۔









سادگی کے لیے ہم سسٹم A کو A_client اور سسٹم B کو B_server کے طور پر پورے مضمون میں کہیں گے۔



فائل کی ضروریات:

ہمیں ضرورت ہے server.py اور یہ فائل سرور سسٹم میں موجود ہونی چاہیے۔ ہمارے معاملے میں server.py B_server سسٹم پر ہونا چاہیے۔





مزید دو فائلیں۔ client.py اور sample.txt کلائنٹ سسٹم میں موجود ہونا چاہیے۔ ہمارے معاملے میں وہ دو فائلیں A_client سسٹم میں موجود ہونی چاہئیں۔

مفروضے:

یہاں مفروضے ہیں:



  • ہمارے پاس ٹرمینل رسائی کے ساتھ دو لینکس سسٹم ہونے چاہئیں۔
  • ترجیحی لینکس ذائقہ ہے۔ اوبنٹو۔ .
  • Python3 انسٹال ہونا چاہیے۔
  • دونوں لینکس سسٹم کو ایک دوسرے کو پنگ کرنے کے قابل ہونا چاہئے۔ استعمال کریں۔ پنگ پنگ چیک کرنے کا حکم۔
  • ایک سسٹم کو سرور کے طور پر کام کرنا چاہیے اور دوسرے سسٹم کو ایک خاص وقت پر کلائنٹ کے طور پر کام کرنا چاہیے۔

حدود:

آگے بڑھنے سے پہلے ہمیں یہ جان لینا چاہیے کہ اس پروگرام کی کچھ حدود ہیں۔

  • اس پروگرام کو چلانے کے لیے Python3+ انسٹال ہونا چاہیے۔ اگر آپ ازگر کے پرانے ورژن پر چلتے ہیں تو آپ غلطی یا مختلف رویے کا مشاہدہ کرسکتے ہیں۔
  • ابھی تک اس پروگرام کے ذریعے صرف ٹیکسٹ فائل منتقل کی جا سکتی ہے۔ کوئی اور فارمیٹ فائل جس میں متن نہیں ہے ناکام ہو سکتا ہے۔
  • بنیادی پروگرامنگ استثناء کو پروگرام میں سنبھالا گیا ہے۔
  • پروگرام اوبنٹو کے علاوہ دوسرے OS پر چل سکتا ہے یا نہیں۔
  • کلائنٹ سائیڈ پر ٹیکسٹ فائل مختصر ہونی چاہیے کیونکہ 1024 بائٹس کا بفر سائز استعمال کیا گیا ہے۔

ضروریات مرتب کریں:

  • ہمیں اس پروگرام کو آزمانے کے لیے کم از کم ایک لینکس سسٹم کی ضرورت ہے۔ لیکن سفارش یہ ہے کہ دو مختلف لینکس سسٹم استعمال کیے جائیں جو نیٹ ورک کے ذریعے جڑے ہوئے ہیں۔
  • دو سسٹم ایتھرنیٹ یا وائی فائی یا کسی دوسرے کنکشن کے ذریعے منسلک ہونے چاہئیں۔

سرور سورس کوڈ:

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

کلائنٹ سورس کوڈ:

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

پروگرام اور متوقع آؤٹ پٹ کیسے چلائیں:

پروگرام کو چلانے کے لیے یہ اقدامات ہیں۔

مرحلہ 1: B_server سسٹم پر جائیں اور ٹرمینل کھولیں۔ ٹرمینل کھولنے کے لیے شارٹ کٹ ہے۔ Alt+Ctrl+t۔

مرحلہ 2: اب اس راستے پر جائیں جہاں server.py موجود ہے۔

مرحلہ 3: اب نیچے کی طرح server.py چلائیں۔

python3 سرور.py

کوئی غلطی نہیں ہونی چاہیے اور آپ کو نیچے پرنٹ دیکھنا چاہیے۔

سرور پورٹ پر درج ہے: 9898۔

کاپی شدہ فائل کا نام recv.txt سرور سائیڈ پر ہوگا۔

مرحلہ 4: اب A_client سسٹم میں ٹرمینل کھولیں۔

مرحلہ 5: اس راستے پر جائیں جہاں client.py اور sample.txt موجود ہیں۔

مرحلہ 6: اب نیچے کی طرح client.py چلائیں۔

python3 کلائنٹ۔py <B_server سسٹم IP۔>

ہم نے مشاہدہ کیا ہے کہ ہمیں سرور کا IP پتہ جاننے کی ضرورت ہے۔ ہم B_server سسٹم کا IP ایڈریس جاننے کے لیے نیچے کمانڈ پر عمل کر سکتے ہیں۔

ifconfig

اب A_client سسٹم کی آؤٹ پٹ اس طرح ہونی چاہیے۔

################## سرور کے نیچے سے پیغام موصول ہوا ہے #################
| --------------------------------- |
ہیلو کلائنٹ۔[آئی پی ایڈریس: 192.168.1.102]،
** سرور میں خوش آمدید **
سرور۔
| --------------------------------- |

مرحلہ 7: اب B_server پر جائیں اور نیچے آؤٹ پٹ تلاش کریں۔

فائل کامیابی سے کاپی ہو گئی ہے۔
سرور نے کنکشن بند کر دیا۔

مرحلہ 8: سرور فولڈر میں ایک فائل کا نام recv.txt ہونا چاہیے۔ اس recv.txt کا مواد ایک ہی نمونہ. txt ہونا چاہیے۔

لہذا ہم نے ایک فائل کو کلائنٹ سے سرور تک نیٹ ورک پر ازگر پروگرام کے ذریعے کامیابی سے کاپی کیا ہے۔

کوڈ کی وضاحت:

دو ازگر کی فائلیں ہیں۔ server.py اور client.py .

نوٹ کریں کہ ہم ایک بار وضاحت کریں گے اگر کوئی کوڈ server.py اور client.py کے اندر ایک جیسا ہے۔

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

یہ شیبنگ لائن ہے جس کا مطلب ہے بطور ڈیفالٹ اس server.py کو python3 استعمال کرنا چاہیے۔ آئیے اس لائن کا ایک فائدہ دیکھیں۔

ہم نے server.py یا client.py کو پھانسی دی ہے۔ ازگر 3. اب ازگر 3 استعمال کیے بغیر ہم ازگر کی فائل کو چلا سکتے ہیں۔ مندرجہ ذیل احکامات پر عمل کریں۔

سپر صارف موڈ پر جائیں:

اس کی

.py فائل کو تمام اجازت دیں:

chmod777۔سرورpy

server.py چلائیں:

./ سرورpy درآمد ساکٹ
درآمد کرنا۔ساکٹلائبریری ازگر پروگرام میں۔جیسا کہہم جا رہے ہیں
استمال کے لیےساکٹ کے لیےکنکشن

s = ساکٹ.ساکٹ()

ہم ایک شے بنا رہے ہیں۔ s ساکٹ کے تمام طریقوں تک رسائی حاصل کرنا۔ یہ OOPs کا تصور ہے۔

پورٹ= 9898۔

اب ہم ایک ایسی بندرگاہ کا انتخاب کرتے ہیں جہاں سرور سن رہا ہو۔ ہم اس کی بجائے غیر محفوظ بندرگاہ استعمال کر سکتے ہیں۔

sباندھنا((''،پورٹ))

ہم سرور آئی پی ایڈریس کو اس بندرگاہ [9898] سے باندھنے کے لیے بائنڈ طریقہ استعمال کرتے ہیں۔ ایک مشاہدہ یہ ہے کہ ہم بائنڈ میتھڈ کی پہلی دلیل کی جگہ سرور کا عین IP ایڈریس استعمال کر سکتے تھے لیکن ہم خالی چھوڑنے کا انتخاب کرتے ہیں کیونکہ یہ کام ٹھیک ہے۔

sباندھنا((IP پتہ،پورٹ))
فائل = کھلا('recv.txt'، 'wb')

ہم نے ایک فائل کا نام recv.txt سرور میں لکھنے کے موڈ کے لیے کھول دیا ہے اور فائل پوائنٹر مل گیا ہے۔ یہ ضروری ہے کیونکہ ہمیں کلائنٹ سے ایک ٹیکسٹ فائل کاپی کرنی ہوگی۔

جبکہ سچ ہے۔:

آئیے ایک لامحدود شروع کرتے ہیں جبکہ سرور کا کام بطور لوپ اس وقت تک انتظار کرنا ہے جب تک کہ کوئی کلائنٹ اس 9898 پورٹ پر سرور سے رابطہ نہ کرے۔ تو یہ جبکہ لوپ درکار ہے۔

کون،addr=sقبول کریں()

یہ کوڈ کلائنٹ سے آنے والی کنکشن کی کسی بھی درخواست کو قبول کرنا ہے۔ کون استعمال کرے گا۔ کون کلائنٹ کے ساتھ بات چیت اور addr کلائنٹ کا آئی پی ایڈریس ہے جس نے پورٹ 9898 پر اس سرور کو ہنگامہ آرائی کی درخواست بھیجی ہے۔

msg= 'nn| --------------------------------- |nہیلو کلائنٹ [آئی پی ایڈریس:
'
+ addr[]+'] ،n** سرور میں خوش آمدید **nسرور۔n
| --------------------------------- |n nn'

یہ کوڈ کلائنٹ کو بھیجنے کے لیے ایک پیغام بنانا ہے۔ یہ پیغام کلائنٹ ٹرمینل پر پرنٹ ہونا چاہیے۔ یہ تصدیق کرتا ہے کہ کلائنٹ سرور کے ساتھ بات چیت کرنے کے قابل ہے۔

کونبھیجیں(msg.انکوڈ())

اب ہمارے پاس پیغام تیار ہے ، اور پھر اسے استعمال کرتے ہوئے کلائنٹ کو بھیجیں۔ کون یہ کوڈ دراصل کلائنٹ کو پیغام بھیجتا ہے۔

RecvData۔=کونrecv(1024۔)

یہ کوڈ کوئی بھی ڈیٹا وصول کر رہا ہے جو کلائنٹ سائیڈ سے بھیجا جاتا ہے۔ ہمارے معاملے میں ہم نمونہ. txt کے مواد کی توقع کر رہے ہیں۔ RecvData۔ .

جبکہRecvData:

ایک اور جبکہ حالت RecvData کے ساتھ لوپ خالی نہیں ہے۔ ہمارے معاملے میں یہ خالی نہیں ہے۔

فائل.لکھیں(RecvData۔)

ایک بار جب ہمارے اندر مواد ہو جائے۔ RecvData۔ پھر ہم اس فائل کو لکھ رہے ہیں۔ recv.txt فائل پوائنٹر کا استعمال کرتے ہوئے فائل.

RecvData۔=کونrecv(1024۔)

اگر کلائنٹ سے کوئی ڈیٹا ہے تو دوبارہ حاصل کرنے کی کوشش کر رہا ہے۔ ایک بار۔ RecvData۔ کوئی کوڈ نہیں ہے جبکہ کوڈ ٹوٹ جائے گا جبکہ لوپ۔

فائل.بند کریں()

یہ صرف فائل پوائنٹر کو بند کردے گا جیسا کہ ہم فائل لکھنے کے ساتھ کر چکے ہیں۔

کونبند کریں()

اس سے کلائنٹ کے ساتھ رابطہ ختم ہو جائے گا۔

توڑ

یہ لامحدود سے باہر آنا ہے جبکہ B_server پر لوپ ہے۔

  1. client.py:
درآمد sys

sys لائبریری درآمد کرنا جیسا کہ ہم ازگر میں دلیل کی سہولت استعمال کرنا چاہتے ہیں۔

اگر (لین(sys.argv) > ):
سرور آئی پی= sys.argv[]
اور:
پرنٹ کریں('nnکی طرح چلائیں۔npython3 client.pynn')
باہر نکلیں()

جیسا کہ ہم B_server کا IP پتہ چلاتے وقت فائل نام client.py کے بعد پاس کرتے ہیں ، ہمیں اس سرور کا IP پتہ کلائنٹ کے اندر پکڑنے کی ضرورت ہے۔

... .. سرور آئی پی۔

اگر صارف کم از کم ایک دلیل کوڈ پاس نہیں کرتا ہے تو مدد دکھاتا ہے اور کوڈ سے باہر آتا ہے۔

پورٹ= 9898۔

یہ وہی بندرگاہ ہونی چاہیے جس کا B_server سائیڈ میں ذکر کیا گیا ہے۔

sجڑیں((سرور آئی پی،پورٹ))

یہ کوڈ اس پورٹ کے ساتھ سرور آئی پی سے ٹی سی پی کنکشن کرے گا۔ اس پونٹ میں کچھ بھی غلطی کنکشن میں ناکامیوں کا نتیجہ ہے۔

فائل = کھلا('sample.txt'، 'ر ب')

ہم صرف مواد پڑھنے کے لیے sample.txt کو ریڈ موڈ میں کھول رہے ہیں۔

SendData۔= فائل.پڑھیں(1024۔)

فائل کا مواد پڑھنا اور اندر ڈالنا۔ SendData۔ متغیر

جبکہSendData:

ہم ایک شروع کر رہے ہیں جبکہ لوپ اگر SendData۔ ڈیٹا ہے. ہمارے معاملے میں اگر sample.txt خالی نہیں ہے تو اس میں ڈیٹا ہونا چاہیے۔

sبھیجیں(SendData۔)

اب ہم مواد بھیج سکتے ہیں۔ sample.txt ساکٹ آبجیکٹ کا استعمال کرتے ہوئے سرور پر۔ s

SendData۔= فائل.پڑھیں(1024۔)

اگر کچھ باقی ہے تو دوبارہ پڑھیں۔ تو فائل سے پڑھنے کے لیے کچھ نہیں ہوگا۔ SendData۔ خالی ہو جائے گا اور یہ لوپ سے باہر آئے گا۔

sبند کریں()

یہ کلائنٹ کی طرف سے کنکشن بند نہیں ہے۔

اوبنٹو اسکرین شاٹس سرور سائیڈ۔

اوبنٹو اسکرین شاٹس کلائنٹ سائیڈ۔

تجربہ شدہ امتزاج:

  • لینکس بطور سرور اور لینکس بطور کلائنٹ: پاس۔
  • لینکس بطور کلائنٹ اور لینکس بطور سرور: پاس۔
  • لینکس بطور سرور اور ونڈوز 10 بطور کلائنٹ: پاس۔
  • لینکس بطور کلائنٹ اور ونڈوز 10 بطور سرور: پاس۔

سفارش یہ ہے کہ سرور اور کلائنٹ کے لیے دو لینکس سسٹم استعمال کیے جائیں۔

متوقع غلطیاں:

  1. اگر سرور 9898 پورٹ پر نہیں چل رہا ہے تو آپ ذیل میں خرابی دیکھ سکتے ہیں۔

ٹریس بیک (تازہ ترین کال آخری):

فائل۔'client.py'،لائن22۔، میں <ماڈیول>
sجڑیں((سرور آئی پی،پورٹ))
ConnectionRefusedError:[ارنو۔111۔]کنکشن نے انکار کر دیا۔
  1. اگر آئی پی ایڈریس کلائنٹ سائیڈ پر نہیں دیا گیا تو ذیل میں خرابی نظر آتی ہے۔

کی طرح چلائیں۔

python3 کلائنٹ۔py <سرورپ ایڈریس>
  1. ذیل میں خرابی نظر آتی ہے اگر 1۔سینٹکلائنٹ کی طرف سے دلیل آئی پی ایڈریس نہیں ہے۔

ٹریس بیک (تازہ ترین کال آخری):

فائل۔'client.py'،لائن22۔، میں <ماڈیول>
sجڑیں((سرور آئی پی،پورٹ))
ساکٹ.غلطی:[ارنو -]نام۔یاسروسنہیںجانا جاتا ہے
  1. اگر بندرگاہ 98980 کی طرح استعمال ہو تو ذیل میں خرابی نظر آتی ہے۔

ٹریس بیک (تازہ ترین کال آخری):

فائل۔'client.py'،لائن22۔، میں <ماڈیول>
sجڑیں((سرور آئی پی،پورٹ))
اوور فلو ایرر۔: getsockaddrarg: port ہونا چاہیے۔-65535۔.
  1. اگر نمونہ. txt کلائنٹ سائیڈ پر موجود نہ ہو تو ذیل میں خرابی نظر آتی ہے۔

ٹریس بیک (تازہ ترین کال آخری):

فائل۔'client.py'،لائن25۔، میں <ماڈیول>
فائل = کھلا('sample.txt'، 'ر ب')
FileNotFoundError:[ارنو۔]ایسا نہیں۔فائل یاڈائریکٹری:'sample.txt'

نتیجہ:

اس پروگرام کا استعمال کرتے ہوئے ہم ازگر پروگرام کا استعمال کرتے ہوئے نیٹ ورک کے ذریعے ایک سسٹم سے دوسرے سسٹم میں ایک سادہ ٹیکسٹ فائل بھیج سکتے ہیں۔ اس سے ہمیں ازگر اور ساکٹ پروگرامنگ کی بنیادی تعلیم بھی ملتی ہے تاکہ نیٹ ورک پر ڈیٹا بھیج سکیں۔