এই প্রোগ্রামটি চালানোর জন্য এখানে মৌলিক সেট আপ ডায়াগ্রাম রয়েছে।
সরলতার জন্য আমরা সিস্টেম A কে A_client এবং সিস্টেম B কে B_server হিসেবে পুরো প্রবন্ধ জুড়ে বলব।
ফাইলের প্রয়োজনীয়তা:
আমাদের দরকার server.py এবং এই ফাইলটি সার্ভার সিস্টেমে উপস্থিত থাকা উচিত। আমাদের ক্ষেত্রে server.py B_server সিস্টেমে থাকা উচিত।
আরো দুটি ফাইল client.py এবং sample.txt ক্লায়েন্ট সিস্টেমে উপস্থিত থাকতে হবে। আমাদের ক্ষেত্রে সেই দুটি ফাইল A_client সিস্টেমে উপস্থিত থাকা উচিত।
অনুমান:
এখানে অনুমান আছে:
- আমাদের টার্মিনাল অ্যাক্সেস সহ দুটি লিনাক্স সিস্টেম থাকা উচিত।
- পছন্দসই লিনাক্স গন্ধ উবুন্টু ।
- Python3 ইনস্টল করা উচিত।
- উভয় লিনাক্স সিস্টেম একে অপরকে পিং করতে সক্ষম হওয়া উচিত। ব্যবহার করুন পিং পিং চেক করার কমান্ড।
- একটি সিস্টেম সার্ভার হিসাবে কাজ করা উচিত এবং অন্য সিস্টেম একটি নির্দিষ্ট সময়ে ক্লায়েন্ট হিসাবে কাজ করা উচিত।
সীমাবদ্ধতা:
আমরা আরও এগিয়ে যাওয়ার আগে আমাদের জানা উচিত যে এই প্রোগ্রামের কিছু সীমাবদ্ধতা রয়েছে।
- এই প্রোগ্রামটি চালানোর জন্য Python3+ ইনস্টল করা উচিত। পাইথন পুরানো সংস্করণগুলিতে চালানো হলে আপনি ত্রুটি বা ভিন্ন আচরণ লক্ষ্য করতে পারেন।
- এই প্রোগ্রামের মাধ্যমে এখন পর্যন্ত শুধুমাত্র টেক্সট ফাইল হস্তান্তর করা যাবে। অন্য কোন ফরম্যাট ফাইল যাতে টেক্সট থাকে না তা ব্যর্থ হতে পারে।
- প্রাথমিক প্রোগ্রামিং ব্যতিক্রমগুলি প্রোগ্রামে পরিচালিত হয়েছে।
- উবুন্টু ছাড়া অন্য অপারেটিং সিস্টেমে প্রোগ্রাম চলতে পারে বা নাও পারে।
- 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 চালান
পাইথন 3 সার্ভার।pyকোনও ত্রুটি হওয়া উচিত নয় এবং আপনার নীচের প্রিন্টগুলি দেখা উচিত
সার্ভারে পোর্টে তালিকা করা হচ্ছে: 9898অনুলিপি করা ফাইলের নাম হবে recv.txt সার্ভারের পাশে
ধাপ 4: এখন A_client সিস্টেমে টার্মিনাল খুলুন।
ধাপ 5: সেই পথে যান যেখানে client.py এবং sample.txt উপস্থিত।
ধাপ 6: এখন নিচের মত client.py চালান
পাইথন 3 ক্লায়েন্ট।py <B_ সার্ভার সিস্টেম আইপি>আমরা লক্ষ্য করেছি যে আমাদের সার্ভারের আইপি ঠিকানা জানতে হবে। B_server সিস্টেমের IP ঠিকানা জানতে আমরা নীচের কমান্ডটি চালাতে পারি।
ifconfig
এখন A_client সিস্টেমের আউটপুট এইরকম হওয়া উচিত
################### নীচের বার্তাটি সার্ভার থেকে পেয়েছে ##################| --------------------------------- |
হাই ক্লায়েন্ট[আইপি ঠিকানা: 192.168.1.102],
** সার্ভারে স্বাগতম **
-সার্ভার
| --------------------------------- |
ধাপ 7: এখন B_server এ যান এবং নীচের আউটপুটটি দেখুন
ফাইল সফলভাবে অনুলিপি করা হয়েছেসার্ভার সংযোগ বন্ধ করল
ধাপ 8: সার্ভার ফোল্ডারে একটি ফাইলের নাম recv.txt থাকতে হবে। এই recv.txt এর বিষয়বস্তু একই sample.txt হওয়া উচিত।
তাই আমরা পাইথন প্রোগ্রামের মাধ্যমে নেটওয়ার্কের মাধ্যমে ক্লায়েন্ট থেকে সার্ভারে সফলভাবে একটি ফাইল অনুলিপি করেছি।
কোড ব্যাখ্যা:
দুটি পাইথন ফাইল আছে server.py এবং client.py ।
মনে রাখবেন যে সার্ভার.পি এবং ক্লায়েন্ট.পি এর ভিতরে কোন কোড একই হলে আমরা একবার ব্যাখ্যা করব।
- server.py:
এটি শেবাং লাইন যার মানে ডিফল্টভাবে এই server.py- এর python3 ব্যবহার করা উচিত। আসুন এই লাইনের একটি সুবিধা দেখি।
আমরা server.py বা client.py মত এক্সিকিউট করেছি পাইথন 3। এখন পাইথন 3 ব্যবহার না করে আমরা পাইথন ফাইলটি চালাতে পারি। নিচের কমান্ডগুলো অনুসরণ করুন
সুপার ইউজার মোডে যান:
এর.Py ফাইলের সমস্ত অনুমতি দিন:
chmod777সার্ভারpyServer.py চালান:
।/সার্ভারpy আমদানি সকেটআমদানি করছেসকেটপাইথন প্রোগ্রামে লাইব্রেরিহিসাবেআমরা যাচ্ছি
ব্যবহার করাসকেট জন্যসংযোগ
গুলি = সকেট।সকেট()
আমরা একটি বস্তু তৈরি করছি গুলি সকেটের সমস্ত পদ্ধতি অ্যাক্সেস করতে। এটি একটি OOPs ধারণা।
বন্দর= 9898এখন আমরা একটি পোর্ট নির্বাচন করি যেখানে সার্ভার শুনবে। আমরা এর পরিবর্তে অ সংরক্ষিত পোর্ট ব্যবহার করতে পারি।
গুলিবাঁধাই করা(('',বন্দর))সার্ভার আইপি অ্যাড্রেসকে সেই পোর্টে আবদ্ধ করার জন্য আমরা বাইন্ড পদ্ধতি ব্যবহার করি [9898]। একটি পর্যবেক্ষণ হল আমরা বাইন্ড পদ্ধতির প্রথম যুক্তির জায়গায় সার্ভারের সঠিক আইপি ঠিকানা ব্যবহার করতে পারতাম কিন্তু এই কাজটি সূক্ষ্ম হওয়ায় আমরা ফাঁকা রেখে নির্বাচন করি।
গুলিবাঁধাই করা((আইপি ঠিকানা,বন্দর))ফাইল = খোলা('recv.txt', 'wb')
আমরা একটি ফাইলের নাম recv.txt সার্ভারে রাইট মোডের জন্য খুলেছি এবং ফাইল পয়েন্টার পেয়েছি। এটি প্রয়োজন কারণ আমাদের ক্লায়েন্ট থেকে একটি পাঠ্য ফাইল অনুলিপি করতে হবে।
যখন সত্য:আসুন একটি অসীম শুরু করি যখন সার্ভারের কাজ হিসাবে লুপ অপেক্ষা করা হয় যতক্ষণ না ক্লায়েন্ট সেই 9898 পোর্টে সার্ভারের সাথে যোগাযোগ করে। সুতরাং এই যখন লুপ প্রয়োজন।
conn,addr=গুলিগ্রহণ()এই কোডটি ক্লায়েন্টের কাছ থেকে আগত সংযোগের অনুরোধ গ্রহণ করা। কন ব্যবহার করবে conn ক্লায়েন্টের সাথে যোগাযোগ করতে এবং addr ক্লায়েন্টের IP ঠিকানা হল যিনি 9898 পোর্টে এই সার্ভারে হৈচৈ অনুরোধ পাঠিয়েছেন।
বার্তা= 'nn| --------------------------------- |nহাই ক্লায়েন্ট [আইপি ঠিকানা:'+ addr[0]+'],n** সার্ভারে স্বাগতম **n-সার্ভারn
| --------------------------------- |n nn'
এই কোডটি ক্লায়েন্টকে পাঠানোর জন্য একটি বার্তা তৈরি করা। এই বার্তাটি ক্লায়েন্ট টার্মিনালে প্রিন্ট করা উচিত। এটি নিশ্চিত করে যে ক্লায়েন্ট সার্ভারের সাথে যোগাযোগ করতে সক্ষম।
conn।পাঠান(বার্তাএনকোড())এখন আমাদের কাছে বার্তা প্রস্তুত, এবং তারপরে এটি ব্যবহার করে ক্লায়েন্টকে পাঠান conn। এই কোডটি আসলে ক্লায়েন্টকে বার্তা পাঠায়।
RecvData=conn।recv(1024)এই কোডটি ক্লায়েন্ট পক্ষ থেকে পাঠানো যেকোনো ডেটা গ্রহণ করছে। আমাদের ক্ষেত্রে আমরা sample.txt এর বিষয়বস্তু আশা করছি RecvData ।
যখনRecvData:আর একটি যখন শর্ত RecvData সঙ্গে লুপ খালি নয়। আমাদের ক্ষেত্রে এটি খালি নয়।
ফাইল।লিখুন(RecvData)একবার আমাদের ভিতরে বিষয়বস্তু আছে RecvData তারপর আমরা সেই ফাইলটিতে লিখছি recv.txt ফাইল পয়েন্টার ব্যবহার করে ফাইল
RecvData=conn।recv(1024)ক্লায়েন্টের কাছ থেকে কোন ডেটা থাকলে আবার গ্রহণ করার চেষ্টা করা হচ্ছে। একদা RecvData কোন তথ্য নেই কোড যখন লুপ ভাঙ্গবে।
ফাইল।বন্ধ()এটি ফাইল পয়েন্টারটি বন্ধ করবে কারণ আমরা ফাইল লেখার কাজ সম্পন্ন করেছি।
conn।বন্ধ()এটি ক্লায়েন্টের সাথে সংযোগ বন্ধ করবে।
বিরতিএটি অসীম থেকে বেরিয়ে আসে যখন B_server এ লুপ থাকে।
- client.py:
Sys লাইব্রেরি আমদানি করা যেমন আমরা পাইথনে আর্গুমেন্ট সুবিধা ব্যবহার করতে চাই।
যদি (লেন(sys।argv) > ঘ):সার্ভারআইপি= sys।argv[ঘ]
অন্য:
ছাপা('nnমত চালানnpython3 client.pynn')
প্রস্থান(ঘ)
যখন আমরা চলার সময় B_server এর আইপি অ্যাড্রেস পাস করি, তখন ক্লায়েন্টের ভিতরে আমাদের সার্ভারের আইপি অ্যাড্রেস ধরতে হবে।
… .. if (len (sys.argv)> 1): => ব্যবহারকারী আইপি অ্যাড্রেস হিসেবে অন্তত একটি যুক্তি পাস করে এবং সেই আইপি অ্যাড্রেস ইনডিকে ধরা সার্ভারআইপি।
যদি ব্যবহারকারী কমপক্ষে একটি আর্গুমেন্ট কোড পাস না করে সাহায্য দেখায় এবং কোড থেকে বেরিয়ে আসে।
বন্দর= 9898এটি B_server পাশে উল্লিখিত একই পোর্ট হতে হবে।
গুলিসংযোগ((সার্ভারআইপি,বন্দর))এই কোডটি সেই পোর্টের সাথে সার্ভার আইপি তে টিসিপি সংযোগ করবে। এই পোনিন্টে কিছু ভুল হলে সংযোগে ব্যর্থতা দেখা দেয়।
ফাইল = খোলা('sample.txt', 'আরবি')আমরা শুধুমাত্র কন্টেন্ট পড়ার জন্য রিড মোডে sample.txt খুলছি।
তথ্য পাঠান= ফাইল।পড়ুন(1024)ফাইলের বিষয়বস্তু পড়া এবং ভিতরে রাখা তথ্য পাঠান পরিবর্তনশীল
যখনতথ্য পাঠান:আমরা একটি শুরু করছি যখন লুপ যদি তথ্য পাঠান তথ্য আছে আমাদের ক্ষেত্রে যদি sample.txt খালি না থাকে তবে তার ডেটা থাকা উচিত।
গুলিপাঠান(তথ্য পাঠান)এখন আমরা এর বিষয়বস্তু পাঠাতে পারি sample.txt সকেট বস্তু ব্যবহার করে সার্ভারে গুলি
তথ্য পাঠান= ফাইল।পড়ুন(1024)আবার কিছু পড়লে বাকি থাকবে। সুতরাং ফাইল থেকে পড়ার মতো কিছুই থাকবে না তথ্য পাঠান খালি হবে এবং এটি লুপ থেকে বেরিয়ে আসবে।
গুলিবন্ধ()এটি ক্লায়েন্টের দিক থেকে সংযোগ বন্ধ করে না।
উবুন্টু স্ক্রিনশট সার্ভারের পাশে
উবুন্টু স্ক্রিনশট ক্লায়েন্ট সাইড
পরীক্ষিত সমন্বয়:
- সার্ভার হিসাবে লিনাক্স এবং ক্লায়েন্ট হিসাবে লিনাক্স: পাস
- ক্লায়েন্ট হিসাবে লিনাক্স এবং সার্ভার হিসাবে লিনাক্স: পাস
- সার্ভার হিসেবে লিনাক্স এবং ক্লায়েন্ট হিসেবে উইন্ডোজ ১০: পাস
- ক্লায়েন্ট হিসেবে লিনাক্স এবং সার্ভার হিসেবে উইন্ডোজ ১০: পাস
সার্ভার এবং ক্লায়েন্টের জন্য দুটি লিনাক্স সিস্টেম ব্যবহার করার সুপারিশ।
প্রত্যাশিত ত্রুটি:
- 9898 পোর্টে সার্ভার না চললে আপনি নিচে ত্রুটি দেখতে পারেন
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল'client.py',লাইন22, ভিতরে <মডিউল>গুলিসংযোগ((সার্ভারআইপি,বন্দর))
ConnectionRefusedError:[এর্নো111]সংযোগ প্রত্যাখ্যাত
- ক্লায়েন্টের পাশে আইপি অ্যাড্রেস পাস না হলে নিচে ত্রুটি দেখা যায়
মত চালান
পাইথন 3 ক্লায়েন্ট।py <সার্ভারের আইপি ঠিকানা>- নীচে ত্রুটি দেখা যায় যদি 1সেন্টক্লায়েন্ট পক্ষের যুক্তি একটি আইপি ঠিকানা নয়
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল'client.py',লাইন22, ভিতরে <মডিউল>গুলিসংযোগ((সার্ভারআইপি,বন্দর))
সকেট।ভুল:[ত্রুটি -2]নামঅথবাসেবানাপরিচিত
- পোর্ট 98980 এর মত ব্যবহার করলে নীচের ত্রুটি দেখা যায়
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল'client.py',লাইন22, ভিতরে <মডিউল>গুলিসংযোগ((সার্ভারআইপি,বন্দর))
ওভারফ্লো ত্রুটি: getsockaddrarg: পোর্ট হতে হবে0-65535।
- নিচের ত্রুটি দেখা যায় যদি sample.txt ক্লায়েন্টের পাশে না থাকে।
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল'client.py',লাইন25, ভিতরে <মডিউল>ফাইল = খোলা('sample.txt', 'আরবি')
FileNotFoundError:[এর্নো2]এরকম নাফাইল অথবাডিরেক্টরি:'sample.txt'
উপসংহার:
এই প্রোগ্রাম ব্যবহার করে আমরা পাইথন প্রোগ্রাম ব্যবহার করে নেটওয়ার্কের মাধ্যমে একটি সিস্টেম থেকে অন্য সিস্টেমে একটি সাধারণ টেক্সট ফাইল পাঠাতে পারি। এটি আমাদের পাইথন এবং সকেট প্রোগ্রামিং এর মৌলিক শিক্ষা দেয় নেটওয়ার্কের মাধ্যমে ডেটা পাঠানোর জন্য।