কম্পিউটার টিউটোরিয়াল

পাইথনে সকেট প্রোগ্রামিং (Socket Programming) বেসিক


সকেট কী?

সকেট হলো বাই-ডিরেকশনাল কমিউনিকেশন চ্যানেলের এন্ডপয়েন্ট। নেটওয়ার্কে দুটি প্রসেস (ক্লায়েন্ট-সার্ভার) যোগাযোগের মাধ্যম। TCP (নির্ভরযোগ্য) এবং UDP (দ্রুত, কানেকশনলেস) প্রোটোকল সাপোর্ট করে।

সার্ভার সাইড (TCP)


import socket

def start_server(host='localhost', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((host, port))
    server_socket.listen(5)
    print(f"Server listening on {host}:{port}")
    
    while True:
        client_socket, addr = server_socket.accept()
        print(f"Connection from {addr}")
        
        data = client_socket.recv(1024).decode('utf-8')
        print(f"Received: {data}")
        
        response = f"Server received: {data}"
        client_socket.send(response.encode('utf-8'))
        client_socket.close()

if __name__ == "__main__":
    start_server()

ক্লায়েন্ট সাইড (TCP)


import socket

def start_client(host='localhost', port=12345):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    
    message = "Hello from client!"
    client_socket.send(message.encode('utf-8'))
    
    response = client_socket.recv(1024).decode('utf-8')
    print(f"Server response: {response}")
    
    client_socket.close()

if __name__ == "__main__":
    start_client()

UDP সার্ভার/ক্লায়েন্ট


# UDP Server
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('localhost', 12345))
while True:
    data, addr = sock.recvfrom(1024)
    print(f"From {addr}: {data.decode()}")
    sock.sendto(b"ACK", addr)

# UDP Client
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b"Hello UDP", ('localhost', 12345))
data, _ = sock.recvfrom(1024)
print(data.decode())

প্রধান সকেট মেথডস

বেস্ট প্র্যাকটিস

  • with socket.socket(...) as s: কনটেক্সট ম্যানেজার ব্যবহার করুন (অটো ক্লোজ)।
  • SO_REUSEADDR সেট করুন "Address already in use" এড়াতে।
  • বড় ডেটার জন্য লুপে recv() কল করুন।
  • এনকোডিং নির্দিষ্ট করুন (.encode('utf-8')/.decode('utf-8'))।
  • প্রোডাকশনে asyncio, socketserver, বা Twisted ফ্রেমওয়ার্ক ব্যবহার করুন।
  1. পাইথন প্রোগ্রামিং-এ ইমেজ ভিত্তিক স্টেগানোগ্রাফি

  2. উইন্ডোজে পাইথন প্রোগ্রামিং-এ IDE সমূহ

  3. পাইথনে লো-লেভেল নেটওয়ার্কিং ইন্টারফেস (socket)

  4. পাইথনে Turtle গ্রাফিক্স: আঙ্কন ও অ্যানিমেশন

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
মেথডবিবরণ
socket()সকেট অবজেক্ট তৈরি
bind((host, port))অ্যাড্রেস বাঁধা (সার্ভার)
listen(backlog)লিসেনিং শুরু (সার্ভার)
accept()কানেকশন অ্যাকসেপ্ট (সার্ভার)
connect((host, port))সার্ভারের সাথে কানেক্ট (ক্লায়েন্ট)
send(data)ডেটা পাঠানো (TCP)
recv(bufsize)ডেটা গ্রহণ (TCP)
sendto(data, addr)ডেটা পাঠানো (UDP)
recvfrom(bufsize)ডেটা গ্রহণ (UDP)
close()সকেট বন্ধ
gethostname()হোস্টনেম পাওয়া