পাইথনে সকেট প্রোগ্রামিং কী এবং এটি কীভাবে আয়ত্ত করা যায়?



আচার এবং সকেট ব্যবহার করে পাইথন অবজেক্ট স্থানান্তর করার পাশাপাশি ক্লায়েন্ট-সার্ভার যোগাযোগের সাথে পাইথনে সকেট প্রোগ্রামিং কী তা শিখুন।

ইন্টারনেট অবিশ্বাস্যভাবে ‘অস্তিত্বের আত্মা’ হয়ে উঠেছে এবং এর ক্রিয়াকলাপটি ‘সংযোগগুলি’ বা ‘নেটওয়ার্ক’ দ্বারা চিহ্নিত। এই নেটওয়ার্কগুলির মধ্যে অন্যতম গুরুত্বপূর্ণ মৌলিক ব্যবহার করে সম্ভব করা হয়েছে সকেট। এই নিবন্ধটি পাইথনের সকেট প্রোগ্রামিংয়ের সাথে সম্পর্কিত সমস্ত ক্ষেত্রকে কভার করে। সকেট আপনাকে এই সংযোগগুলি তৈরি করতে সহায়তা করে while নিঃসন্দেহে এটি সহজ করে তোলে।

জাভা মধ্যে প্যাকেজ কি

আসুন এই নিবন্ধের আওতাধীন সমস্ত বিষয়গুলিতে এক ঝলক দেখে নেওয়া যাক:





সকেট কেন ব্যবহার করবেন?
পাইথনে সকেট কি?
পাইথনে সকেট প্রোগ্রামিং কীভাবে অর্জন করা যায়
সার্ভার কি?
ক্লায়েন্ট কি?
ইকো ক্লায়েন্ট-সার্ভার
একাধিক যোগাযোগ
পাইথন অবজেক্টগুলি স্থানান্তর করা হচ্ছে



সকেট কেন ব্যবহার করবেন?

সকেটগুলি নেটওয়ার্কিংয়ের মেরুদণ্ড। তারা দুটি ভিন্ন প্রোগ্রাম বা ডিভাইসের মধ্যে তথ্যের স্থানান্তরকে সম্ভব করে তোলে। উদাহরণস্বরূপ, আপনি যখন নিজের ব্রাউজারটি খুলবেন, তখন ক্লায়েন্ট হিসাবে আপনি তথ্য স্থানান্তর করার জন্য সার্ভারের সাথে একটি সংযোগ তৈরি করছেন।

এই যোগাযোগের গভীরে ডুব দেওয়ার আগে প্রথমে এই সকেটগুলি কী তা নির্ধারণ করুন।

সকেট কি?

সাধারণ পরিভাষায়, সকেটগুলি ডেটা প্রেরণ এবং গ্রহণের জন্য নির্মিত অভ্যন্তরীণ প্রান্তগুলি। একটি একক নেটওয়ার্কে দুটি সকেট থাকবে, প্রতিটি যোগাযোগের ডিভাইস বা প্রোগ্রামের জন্য একটি। এই সকেটগুলি একটি আইপি ঠিকানা এবং একটি পোর্টের সংমিশ্রণ। কোনও একক ডিভাইসে ব্যবহৃত হচ্ছে এমন পোর্ট নম্বরের উপর ভিত্তি করে ‘এন’ সংখ্যার সকেট থাকতে পারে। বিভিন্ন ধরণের প্রোটোকলের জন্য বিভিন্ন বন্দর উপলভ্য। কয়েকটি সাধারণ বন্দর নম্বর এবং সম্পর্কিত প্রোটোকল সম্পর্কে আরও জানতে নীচের চিত্রটি দেখুন:




সাধারণ বন্দরসমূহ- সকেটপ্রগ্রামিংমিন পাইথন-এডুরেকা

এখন যে আপনি সকেটের ধারণা সম্পর্কে পরিষ্কার, এখন আসুন পাইথনের সকেট মডিউলটি দেখুন:

পাইথনে সকেট প্রোগ্রামিং কীভাবে অর্জন করবেন:

পাইথনে সকেট প্রোগ্রামিং অর্জনের জন্য আপনাকে এগুলি আমদানি করতে হবে সকেট মডিউল বা । এই মডিউলটিতে অন্তর্নির্মিত পদ্ধতিগুলি রয়েছে যা সকেট তৈরি করার জন্য প্রয়োজনীয় এবং একে অপরের সাথে সংযুক্ত হতে সহায়তা করে।

কয়েকটি গুরুত্বপূর্ণ পদ্ধতি নিম্নরূপ:

পদ্ধতিবর্ণনা

সকেট.সকেট ()

সকেট তৈরি করতে ব্যবহৃত (উভয় সার্ভারের পাশাপাশি ক্লায়েন্টকে সকেট তৈরির জন্য প্রয়োজনীয়)

সকেট.অ্যাকসেপ্ট ()

একটি সংযোগ গ্রহণ করতে ব্যবহৃত। এটি এক জোড়া মানগুলি (সংযোগ, ঠিকানা) প্রদান করে যেখানে সংযোগের অন্য প্রান্তে উপস্থিত সকেটের ঠিকানা হ'ল সংযোগের অন্য প্রান্তে উপস্থিত সকেটের ঠিকানা হ'ল সংযোগের ডেটা এবং ঠিকানা প্রেরণের জন্য একটি নতুন সকেট অবজেক্ট

সকেট.বাইন্ড ()

প্যারামিটার হিসাবে নির্দিষ্ট করা ঠিকানার সাথে আবদ্ধ করতে ব্যবহৃত হয়

সকেট.ক্লোজ ()

বন্ধ হিসাবে সকেট চিহ্নিত করতে ব্যবহৃত

সকেট.কনেক্ট ()

পরামিতি হিসাবে নির্দিষ্ট একটি দূরবর্তী ঠিকানা সংযোগ করতে ব্যবহৃত

সকেট.লাইস্টেন ()

সার্ভারকে সংযোগ গ্রহণ করতে সক্ষম করে

এখন যেহেতু আপনি সকেট মডিউলটির গুরুত্ব বুঝতে পেরেছেন, আসুন সকেট প্রোগ্রামিংয়ের জন্য সার্ভার এবং ক্লায়েন্ট তৈরি করতে এটি কীভাবে কাজ করতে পারে তা দেখতে এগিয়ে চলুন in ।

একটি সার্ভার কি?

একটি সার্ভার হয় হয় একটি প্রোগ্রাম, একটি কম্পিউটার, বা একটি ডিভাইস যা নেটওয়ার্ক সংস্থান পরিচালনার জন্য নিবেদিত। সার্ভারগুলি হয় একই ডিভাইস বা কম্পিউটারে থাকতে পারে বা স্থানীয়ভাবে অন্যান্য ডিভাইস এবং কম্পিউটারের সাথে সংযুক্ত হতে পারে বা দূরবর্তীও হতে পারে। বিভিন্ন ধরণের সার্ভার রয়েছে যেমন ডাটাবেস সার্ভার, নেটওয়ার্ক সার্ভার, প্রিন্ট সার্ভার ইত্যাদি

সার্ভারগুলি সাধারণত সংযোগ স্থাপনের জন্য ক্লায়েন্টদের সাথে সংযোগ স্থাপনের জন্য सॉকেট.সকেট (), সকেট.বাইন্ড (), সকেট.লিসটেন () ইত্যাদি পদ্ধতি ব্যবহার করে। এখন একটি সার্ভার তৈরি করতে একটি প্রোগ্রাম লিখি। নিম্নলিখিত উদাহরণ বিবেচনা করুন:

উদাহরণ:

আমদানি সকেট এস = সকেট.সকেট (সকেট.এফএনপেট, সকেট.সোক্ক্রিপ্রেইম) এস.বাইন্ড ((সকেট.জিথোস্টনাম (), 1234)) # পোর্ট নম্বর 0-65535 এর মধ্যে কিছু হতে পারে (আমরা সাধারণত অ-চালিত পোর্টগুলি নির্দিষ্ট করি যা হ'ল > 1023) s.listen (5) সত্য: clt, adr = s.accept () মুদ্রণ (এফ সংযোগের সাথে {আদর} প্রতিষ্ঠিত ') #f স্ট্রিংটি আক্ষরিক স্ট্রিং এফের সাথে উপস্থাপিত যা # ক্যারেটস ক্লিটের ভিতরে পাইথন এক্সপ্রেশনকে অন্তর্ভুক্ত করে .সেন্ড (বাইটস ('পাইথনে সকেট প্রোগ্রামিং', 'utf-8')) # ক্লায়েন্টকেটে তথ্য প্রেরণ

আপনি দেখতে পাচ্ছেন, সকেট তৈরির প্রথম প্রয়োজনীয়তা হ'ল সকেট মডিউলটি আমদানি করা। এরপরে সকেট.সকেট () পদ্ধতিটি সার্ভার-সাইড সকেট তৈরি করতে ব্যবহৃত হয়।

বিঃদ্রঃ:

এএফপিইটি ইন্টারনেট থেকে ঠিকানা উল্লেখ করে এবং এর জন্য একটি জুটি (হোস্ট, পোর্ট) প্রয়োজন যেখানে হোস্টটি কোনও নির্দিষ্ট ওয়েবসাইটের URL বা এর ঠিকানা হতে পারে এবং পোর্ট নম্বরটি একটি পূর্ণসংখ্যা হয়। এসসিকেপ্রিম টিসিপি প্রোটোকল তৈরি করতে ব্যবহৃত হয়।

বাইন্ড () পদ্ধতিটি টিপল (হোস্ট, পোর্ট) হিসাবে দুটি পরামিতি গ্রহণ করে। তবে, নিম্নেরগুলি সাধারণত দখলে থাকায় 4-সংখ্যার পোর্ট নম্বর ব্যবহার করা আরও ভাল। শুনুন () পদ্ধতিটি সার্ভারকে সংযোগ গ্রহণ করতে দেয়। এখানে 5 টি এক সাথে একসাথে আসা একাধিক সংযোগের জন্য সারি। এখানে উল্লেখ করা যেতে পারে এমন সর্বনিম্ন মান 0 হয় (আপনি যদি কম মান দেন তবে এটি 0 এ পরিবর্তিত হয়)। যদি কোনও প্যারামিটার নির্দিষ্ট না করা থাকে তবে এটি একটি ডিফল্ট উপযুক্ত লাগে।

দ্য চিরতরে সংযোগ গ্রহণের অনুমতি দেয়। ‘Clt’ এবং ‘adr’ হ'ল ক্লায়েন্ট অবজেক্ট এবং ঠিকানা। মুদ্রণ বিবৃতিটি কেবল ক্লায়েন্ট সকেটের ঠিকানা এবং পোর্ট নম্বর প্রিন্ট করে। অবশেষে, ক্লিট.সেন্ডটি বাইটে ডেটা প্রেরণে ব্যবহৃত হয়।

এখন যে আমাদের সার্ভারটি প্রস্তুত রয়েছে, আসুন আমরা ক্লায়েন্টের দিকে এগিয়ে যাই।

একটি ক্লায়েন্ট কি?

ক্লায়েন্ট হ'ল একটি কম্পিউটার বা সফ্টওয়্যার যা সার্ভার থেকে তথ্য বা পরিষেবাদি গ্রহণ করে। একটি ক্লায়েন্ট-সার্ভার মডিউলে, ক্লায়েন্টরা সার্ভার থেকে পরিষেবার জন্য অনুরোধ করে। গুগল ক্রোম, ফায়ারফক্স ইত্যাদির মতো ওয়েব ব্রাউজারের সর্বোত্তম উদাহরণ হ'ল এই ওয়েব ব্রাউজারগুলি ব্যবহারকারী দ্বারা নির্দেশিত প্রয়োজনীয় ওয়েব পৃষ্ঠাগুলি এবং পরিষেবার জন্য ওয়েব সার্ভারগুলির জন্য অনুরোধ করে। অন্যান্য উদাহরণগুলির মধ্যে রয়েছে অনলাইন গেমস, অনলাইন চ্যাট ইত্যাদি include

এখন ক্লায়েন্ট-সাইড প্রোগ্রামটি কীভাবে কোড করা যায় সে সম্পর্কে একবার নজর দেওয়া যাক :

উদাহরণ:

আমদানি করুন সকেট এস = सॉকেট.সকেট (সকেট.এফএনএনপিইটি, সকেট.সোক্ক্রিপ্রেইম) এসকোনেক্ট ((সকেট.জেথোস্টনাম (), 2346)) msg ​​= s.recv (1024) মুদ্রণ (msg.decode ('utf-8')) )

প্রথম পদক্ষেপটি হ'ল সকেট মডিউলটি আমদানি করা এবং তারপরে সার্ভার তৈরি করার সময় আপনার মতো করে একটি সকেট তৈরি করা। তারপরে, ক্লায়েন্ট-সার্ভারের মধ্যে সংযোগ তৈরি করতে আপনার (হোস্ট, পোর্ট) নির্দিষ্ট করে সংযোগ () পদ্ধতিটি ব্যবহার করতে হবে।


বিঃদ্রঃ: যখন ক্লায়েন্ট এবং সার্ভার একই কম্পিউটারে থাকে তখন জিথোস্টনাম ব্যবহার করা হয়। (ল্যান - স্থানীয়লিপ / ডাব্লুএইচ - জন প্রচার)

এখানে, ক্লায়েন্ট সার্ভার থেকে কিছু তথ্য পেতে চায় এবং এর জন্য আপনাকে পুনর্নির্মাণ () পদ্ধতিটি ব্যবহার করতে হবে এবং তথ্যটি অন্য ভেরিয়েবলের মধ্যে সংরক্ষণ করা হবে msg কেবল মনে রাখবেন যে পাশ করা হচ্ছে তা বাইটে এবং উপরের প্রোগ্রামের ক্লায়েন্টের মধ্যে একক স্থানান্তরে 1024 বাইট (বাফার আকার) পাওয়া যাবে। স্থানান্তরিত হওয়া তথ্যের পরিমাণের উপর নির্ভর করে এটি যে কোনও পরিমাণে নির্দিষ্ট করা যেতে পারে।

অবশেষে, স্থানান্তরিত হওয়া বার্তাটি ডিকোড করে মুদ্রণ করা উচিত।

এখন যেহেতু আপনি ক্লায়েন্ট-সার্ভার প্রোগ্রামগুলি তৈরি করবেন সে সম্পর্কে সচেতন, তাদের কীভাবে কার্যকর করতে হবে তা দেখার জন্য এগিয়ে চলুন।

ইকো ক্লায়েন্ট-সার্ভার:

এই প্রোগ্রামগুলি সম্পাদন করতে, আপনার কমান্ড প্রম্পটটি খুলুন, আপনি যেখানে আপনার ক্লায়েন্ট এবং সার্ভার প্রোগ্রাম তৈরি করেছেন সেই ফোল্ডারে যান এবং তারপরে টাইপ করুন:

পাই সার্ভার.পি (এখানে, সার্ভার.পি হ'ল সার্ভারের ফাইল নাম, আপনি পাই -3.7 সার্ভার.পিও ব্যবহার করতে পারেন)

এটি হয়ে গেলে সার্ভারটি চলতে শুরু করে। ক্লায়েন্টটি কার্যকর করতে, অন্য একটি সিএমডি উইন্ডোটি খুলুন এবং টাইপ করুন:

পাই ক্লায়েন্ট.পি (এখানে, ক্লায়েন্ট.পি ক্লায়েন্টের ফাইলের নাম)

আউটপুট (সার্ভার):

(ক্লায়েন্ট)

আসুন বাফারের আকার size-এ হ্রাস করে একই প্রোগ্রামটি ব্যবহার করে দেখুন এবং আমরা কী আউটপুট পাই তা দেখুন:

আউটপুট:

আপনি দেখতে পাচ্ছেন, 7 বাইট স্থানান্তর করার পরে সংযোগটি সমাপ্ত হয়। তবে এটি একটি সমস্যা কারণ আপনি সম্পূর্ণ তথ্য পান নি এবং সংযোগটি বন্ধ রয়েছে। এই সমস্যাটি সমাধান করতে চলুন।

একাধিক যোগাযোগ:

ক্লায়েন্ট সম্পূর্ণ তথ্য না পাওয়া পর্যন্ত সংযোগটি অব্যাহত রাখার জন্য আপনি কিছুক্ষণ লুপটি ব্যবহার করতে পারেন:

উদাহরণ:

আমদানি সকেট s = सॉকেট.সকেট (সকেট.এফএনএনপিটি, সকেট.সোক্ক্রিপিআরএএম) এসকনেক্ট ((সকেট.জেথোস্টনাম (), 2346)) যখন সত্য: URL = s.recv (7) মুদ্রণ (msg.decode ('utf- 8 '))

একবার আপনি এটি করার পরে, সম্পূর্ণ বার্তাটি স্থানান্তর প্রতি 7 বাইটে পাবেন।

তবে এবার যেমন আপনি দেখতে পাচ্ছেন, সংযোগটি শেষ হবে না এবং কখন হতে হবে তা কখনই জানেন না। এবং এটি যুক্ত করার জন্য, ক্লায়েন্টটি সার্ভারের কাছ থেকে প্রাপ্ত বার্তা বা তথ্যটি কত বড় তা আপনি যদি আসলেই জানেন না what এই জাতীয় ক্ষেত্রে, আপনি ক্লায়েন্ট পক্ষের নীচে বিট কোডটি ব্যবহার করতে পারেন:

উদাহরণ:

সম্পূর্ণ_আইনফো = '' যখন সত্য: संदेश = s.recv (7) যদি লেন (msg)<=0: break complete_info += msg.decode('utf-8') print(complete_info) 

সার্ভারের পাশে নীচের মতো () পদ্ধতিটি ব্যবহার করুন:

clt.close ()

এর আউটপুট নীচের ছবিতে প্রদর্শিত হিসাবে হবে:

আউটপুট:



উপরের সমস্ত কোডের ব্লকটি হ'ল, তথ্যের আকার পরীক্ষা করে এটি একবারে দুটি বাইটের বাফারে মুদ্রণ করা এবং সংযোগটি সম্পূর্ণ হওয়ার পরে বন্ধ করে দেওয়া।

পাইথন অবজেক্টগুলি স্থানান্তর করা:

এখুনি আপনি কেবল স্ট্রিংগুলি স্থানান্তর করার নকশা পেয়েছেন। কিন্তু, সকেট প্রোগ্রামিং ইন পাইথন এছাড়াও আপনাকে পাইথন অবজেক্টগুলিও স্থানান্তর করতে দেয়। এই বিষয়গুলি সেট, টিপলস, অভিধান ইত্যাদির মতো কিছু হতে পারে এটি অর্জন করতে আপনাকে পাইথনের আচার মডিউলটি আমদানি করতে হবে।

পাইথন আচার মডিউল:

পাইথন আচার মডিউল চিত্রটিতে আসে যখন আপনি আসলে পাইথনের বস্তুগুলিকে সিরিয়ালাইজ বা ডি-সিরিয়ালাইজ করছেন। আসুন একটি ছোট উদাহরণ দেখুন,

উদাহরণ:

আচার মাইলিস্ট আমদানি করুন = [1,2, 'abc'] mymsg = pickle.dumps (মাইলিস্ট) মুদ্রণ (mymsg)

আউটপুট: b’x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e। ’

আপনি দেখতে পাচ্ছেন যে উপরের প্রোগ্রামটিতে, ‘মাইলিস্ট’ আচার মডিউলের ডাম্প () ফাংশনটি ব্যবহার করে সিরিয়ালযুক্ত করা হয়। এছাড়াও একটি নোট তৈরি করুন যে আউটপুটটি একটি ‘বি’ দিয়ে শুরু হয়, যার অর্থ এটি বাইটে রূপান্তরিত। সকেট প্রোগ্রামিংয়ে, আপনি স্থানান্তর করতে এই মডিউলটি প্রয়োগ করতে পারেন পাইথন অবজেক্টস ক্লায়েন্ট এবং সার্ভারের মধ্যে।

পাইথন অবজেক্ট স্ট্রাকচার স্থানান্তর করতে আচার মডিউলটি কীভাবে ব্যবহার করবেন?

আপনি যখন সকেট সহ আচার ব্যবহার করেন, আপনি নেটওয়ার্কের মাধ্যমে একেবারে স্থানান্তর করতে পারেন। সার্ভার থেকে ক্লায়েন্টের কাছে একটি তালিকা স্থানান্তর করতে সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড সহযোগীদের লিখুন:

সার্ভার-সাইড:

আমদানি করুন সকেট আমদানি একটি = 10 এস = সকেট.সকেট (সকেট.এফএনপেট, সকেট.সোক্ক্রিপাম) এস.বাইন্ড ((সকেট.জিথোস্টনাম (), 2133)) # বাইন্ডিং টিপল এস.লাস্টেন (5) সত্য: clt, adr = s.accept () মুদ্রণ (এফ সংযোগ থেকে {আদর} প্রতিষ্ঠিত ') এম = {1:' ক্লায়েন্ট ', 2:' সার্ভার '} মাইএমএসজি = পিকেল.ডম্পস (এম) # আমরা পরে মাইএমএসজি মুদ্রণ করতে চাই = {লেন (মাইএমএসজি): {এ}} 'ইউটিএফ -8') + মায়ামসজি ক্লিট.সেন্ড (মাইএমএসজি)

এখানে, এম একটি অভিধান যা মূলত a যা সার্ভার থেকে ক্লায়েন্টের কাছে প্রেরণ করা দরকার। এটি প্রথমে ডাম্প () ব্যবহার করে অবজেক্টটিকে সিরিয়ালাইজ করে এবং পরে এটি বাইটে রূপান্তরিত করে।
এখন ক্লায়েন্ট-পাশের অংশটি লিখি:

মক্কেলের পক্ষে:

আমদানি করুন সকেট আমদানি আচার একটি = 10 এস = সকেট.সকেট (সকেট.এফএনএনপিটি, সকেট.সোক্ক্রিপিআরএএম) এসকনেক্ট ((সকেট.জিথোস্টনাম (), 2133)) যখন সত্য: সম্পূর্ণ_আইনফো = বি '' রিক_এমএস = সত্য তবে মাইএসজি = s.recv (10) যদি rec_msg: মুদ্রণ করুন (বার্তাটির দৈর্ঘ্য = {mymsg [: a]} ') x = int (mymsg [: a]) rec_msg = মিথ্যা সম্পূর্ণ_আইএনফো + = মায়ামসজি যদি লেন (সম্পূর্ণ_ইনফো) -a == x: মুদ্রণ ('সম্পূর্ণ তথ্য পুনরুদ্ধার') মুদ্রণ (সম্পূর্ণ_আইনফো [a:]) এম = পিকেল.লোডস (সম্পূর্ণ_আইএনফো [a:]) মুদ্রণ (এম) rec_msg = সত্য সম্পূর্ণ_আইএনফো = বি '' মুদ্রণ (সম্পূর্ণ_আইএনফো )

প্রথম যখন লুপটি আমাদের সম্পূর্ণ বার্তা (সম্পূর্ণ_আইনফো) পাশাপাশি বাফার ব্যবহার করে প্রাপ্ত বার্তা (rec_msg) ট্র্যাক রাখতে সহায়তা করবে। rec_ সেট করে বার্তা
তারপরে, বার্তাটি প্রাপ্ত হওয়ার পরে, আমি যা করছি তা হ'ল এটির প্রতিটি বিট মুদ্রণ করে, আকারের 10 বাফায় পেয়ে যাচ্ছিল size এই আকারটি আপনার ব্যক্তিগত পছন্দ অনুসারে কিছু হতে পারে।

তারপরে, যদি প্রাপ্ত বার্তাটি সম্পূর্ণ বার্তার সমান হয়, আমি কেবলমাত্র প্রাপ্ত তথ্য সম্পূর্ণ হিসাবে বার্তাটি মুদ্রণ করছি যা অনুসরণ করে আমি লোড () ব্যবহার করে বার্তাটিকে ডি-সিরিয়ালযুক্ত করেছি।

উপরের প্রোগ্রামটির আউটপুট নিম্নরূপ:

পাইথনে সকেট প্রোগ্রামিং সম্পর্কিত এই নিবন্ধটির শেষে এটি আমাদের এনেছে। আমি আশা করি আপনি সমস্ত ধারণাটি পরিষ্কারভাবে বুঝতে পেরেছেন।

আপনি যথাসম্ভব অনুশীলন নিশ্চিত করুন এবং আপনার অভিজ্ঞতাটি ফিরিয়ে দিন।

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে এই 'পাইথনে সকেট প্রোগ্রামিং' ব্লগের মন্তব্য বিভাগে উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।

পাইথনের বিভিন্ন অ্যাপ্লিকেশন সহ গভীরতর জ্ঞান পেতে, আপনি লাইভের জন্য তালিকাভুক্ত করতে পারেন 24/7 সমর্থন এবং আজীবন অ্যাক্সেস সহ।