পাইথনের স্ট্যান্ডার্ড লাইব্রেরির 'সকেট' মডিউলটি সংজ্ঞায়িত করে কিভাবে সার্ভার এবং ক্লায়েন্ট মেশিন অপারেটিং সিস্টেমের উপরে সকেট এন্ডপয়েন্ট ব্যবহার করে যোগাযোগ করতে পারে। 'সকেট' API-এ সংযোগ-ভিত্তিক এবং সংযোগহীন নেটওয়ার্ক প্রোটোকল উভয়ের জন্য ফাংশন রয়েছে।
সকেট হল একটি দ্বি-মুখী যোগাযোগ লিঙ্কের শেষ বিন্দু। এটি আইপি ঠিকানা এবং পোর্ট নম্বর দ্বারা চিহ্নিত করা হয়। সংযোগ শুরু করার জন্য উভয় প্রান্তে সকেটের সঠিক কনফিগারেশন প্রয়োজন। এটি আগত বার্তাগুলি শোনা এবং তারপর একটি ক্লায়েন্ট-সার্ভার পরিবেশে প্রতিক্রিয়াগুলি প্রেরণ করা সম্ভব করে তোলে৷
'সকেট' মডিউলে সকেট() ফাংশন একটি সকেট অবজেক্ট সেট আপ করে।
import socket obj = socket.socket(family, type, protocol)
'পরিবার' যুক্তিটি ডিফল্টরূপে AF_INET। গ্রহণযোগ্য অন্যান্য মানগুলি হল:AF_INET6, AF_UNIX, AF_CAN বা AF_RDS৷ 'টাইপ' আর্গুমেন্টের মান ডিফল্টভাবে 'SOCK_STREAM' ইঙ্গিত করে সংযোগ-ভিত্তিক প্রোটোকল (TCP)। সংযোগহীন প্রোটোকলের জন্য (UDP) এটি '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' লুপ ব্যাক ঠিকানাও বলা হয়। এটি 'লোকালহোস্ট' এর হোস্টনাম দ্বারা চিহ্নিত করা হয়। সকেট নির্বিচারে খালি পোর্ট নম্বরে শোনার জন্য তৈরি করা হয়। একটি নেটওয়ার্কে দূরবর্তী মেশিনের মধ্যে যোগাযোগের জন্য, প্রকৃত আইপি ঠিকানা ব্যবহার করতে হবে।
ক্লায়েন্ট সকেট তার IP ঠিকানা এবং পোর্ট নম্বরে সার্ভার সকেটে শোনার জন্য সংযোগের অনুরোধ পাঠায়
সংযুক্ত করুন()
obj = socket.socket() obj.connect((host,port))
একবার ক্লায়েন্টের কাছ থেকে সংযোগের অনুরোধ সার্ভার দ্বারা গৃহীত হলে, উভয় সকেট অবজেক্টই এখন TCP প্রোটোকল ব্যবহার করে সংযুক্ত থাকে এবং তারা ডেটা পাঠাতে এবং/অথবা গ্রহণ করতে পারে।
পাঠান()
সার্ভার ক্লায়েন্টকে যে ঠিকানায় বাধা দিয়েছে তা ব্যবহার করে ডেটা পাঠায়।
client.send(bytes)
ক্লায়েন্ট সকেট সকেটে ডেটা পাঠায় এটির সাথে সংযোগ স্থাপন করেছে।
obj.send(bytes)
sendall()
send() এর মতই। এই পদ্ধতিটি সমস্ত ডেটা পাঠানো না হওয়া পর্যন্ত ডেটা প্রেরণ করতে থাকে৷
৷পাঠুন()
এই পদ্ধতিটি শুধুমাত্র UDP প্রোটোকলের ক্ষেত্রে ব্যবহার করা হবে।
recv()
এই পদ্ধতিটি ক্লায়েন্টকে পাঠানো ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়। সার্ভারের ক্ষেত্রে, এটি রিমোট সকেট ব্যবহার করে যার অনুরোধ গৃহীত হয়েছে।
client.recv(bytes)
ক্লায়েন্টের ক্ষেত্রে,
obj.recv(bytes)
recvfrom()
এই পদ্ধতিটি UDP প্রোটোকলের ক্ষেত্রে ব্যবহৃত হয়।
সার্ভার কোড
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()
দুটি কমান্ড প্রম্পট উইন্ডো খুলুন। একটিতে প্রথমে সার্ভার কোড চালান। অন্য রান ক্লায়েন্ট কোড.