চ্যাট অ্যাপ্লিকেশন

প্র্যাকটিস প্রোজেক্টস - পাইথন প্রোগ্রামিং (Python Programming) - Computer Programming

330

চ্যাট অ্যাপ্লিকেশন হলো এমন একটি অ্যাপ্লিকেশন যা ব্যবহারকারীদের রিয়েল-টাইমে বার্তা আদান-প্রদানের সুযোগ দেয়। একটি সহজ চ্যাট অ্যাপ্লিকেশন তৈরি করতে আমরা Python-এর Socket এবং Tkinter ব্যবহার করতে পারি। এখানে Socket প্রোগ্রামিং ব্যবহার করে সার্ভার এবং ক্লায়েন্টের মধ্যে বার্তা আদান-প্রদান করা হবে, এবং Tkinter ব্যবহার করে একটি গ্রাফিক্যাল ইন্টারফেস তৈরি করা হবে।


প্রজেক্ট: চ্যাট অ্যাপ্লিকেশন

ফিচারস

  1. রিয়েল-টাইম চ্যাট: একাধিক ক্লায়েন্ট একসাথে চ্যাট করতে পারবে।
  2. সার্ভার এবং ক্লায়েন্ট: সার্ভার একাধিক ক্লায়েন্টের সাথে সংযুক্ত থাকবে এবং বার্তা আদান-প্রদান পরিচালনা করবে।
  3. Tkinter GUI: বার্তা পাঠানোর জন্য সহজ একটি GUI ইন্টারফেস।

প্রয়োজনীয় লাইব্রেরি

  • socket: নেটওয়ার্ক প্রোগ্রামিংয়ের জন্য।
  • threading: একাধিক থ্রেড চালানোর জন্য (প্রতি ক্লায়েন্টের জন্য আলাদা থ্রেড)।
  • tkinter: গ্রাফিক্যাল ইন্টারফেস তৈরি করতে।

Python-এ socket, threading, এবং tkinter লাইব্রেরিগুলি বিল্ট-ইন, তাই এগুলো আলাদা করে ইন্সটল করার প্রয়োজন নেই।


ধাপ ১: সার্ভার কোড তৈরি করা

প্রথমে একটি সার্ভার তৈরি করতে হবে, যা ক্লায়েন্টদের সংযোগ গ্রহণ করবে এবং বার্তা প্রেরণ করবে।

# server.py
import socket
import threading

# সার্ভার সেটআপ
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 5500))
server.listen()

clients = []
nicknames = []

# বার্তা প্রেরণ করা
def broadcast(message):
    for client in clients:
        client.send(message)

# ক্লায়েন্ট পরিচালনার জন্য ফাংশন
def handle_client(client):
    while True:
        try:
            message = client.recv(1024)
            broadcast(message)
        except:
            index = clients.index(client)
            clients.remove(client)
            client.close()
            nickname = nicknames[index]
            broadcast(f'{nickname} left the chat.'.encode('utf-8'))
            nicknames.remove(nickname)
            break

# সার্ভারের মূল ফাংশন
def receive():
    while True:
        client, address = server.accept()
        print(f'Connected with {str(address)}')

        client.send('NICK'.encode('utf-8'))
        nickname = client.recv(1024).decode('utf-8')
        nicknames.append(nickname)
        clients.append(client)

        print(f'Nickname is {nickname}')
        broadcast(f'{nickname} joined the chat!'.encode('utf-8'))
        client.send('Connected to the server!'.encode('utf-8'))

        thread = threading.Thread(target=handle_client, args=(client,))
        thread.start()

print('Server is running...')
receive()

ধাপ ২: ক্লায়েন্ট কোড তৈরি করা

ক্লায়েন্ট সাইড থেকে বার্তা পাঠানোর জন্য GUI সহ একটি অ্যাপ তৈরি করা হবে।

# client.py
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext
from tkinter import messagebox

nickname = input("Choose a nickname: ")

# ক্লায়েন্ট সেটআপ
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5500))

# GUI সেটআপ
root = tk.Tk()
root.title("Chat Application")

chat_label = tk.Label(root, text="Chat:")
chat_label.pack()

chat_area = scrolledtext.ScrolledText(root)
chat_area.pack(padx=20, pady=5)
chat_area.config(state='disabled')

message_label = tk.Label(root, text="Message:")
message_label.pack()

message_entry = tk.Entry(root, width=50)
message_entry.pack(padx=20, pady=5)

def send_message():
    message = f'{nickname}: {message_entry.get()}'
    client.send(message.encode('utf-8'))
    message_entry.delete(0, tk.END)

send_button = tk.Button(root, text="Send", command=send_message)
send_button.pack(pady=5)

def receive_messages():
    while True:
        try:
            message = client.recv(1024).decode('utf-8')
            chat_area.config(state='normal')
            chat_area.insert('end', message + '\n')
            chat_area.yview('end')
            chat_area.config(state='disabled')
        except:
            print("An error occurred!")
            client.close()
            break

receive_thread = threading.Thread(target=receive_messages)
receive_thread.start()

root.mainloop()

কোড ব্যাখ্যা

সার্ভার কোড (server.py):

  1. সার্ভার সেটআপ: socket ব্যবহার করে সার্ভার শুরু করা হয়েছে এবং ক্লায়েন্ট সংযোগের জন্য bind()listen() ব্যবহার করা হয়েছে।
  2. broadcast() ফাংশন: এই ফাংশনটি প্রতিটি ক্লায়েন্টকে বার্তা প্রেরণ করে।
  3. handle_client() ফাংশন: প্রতিটি ক্লায়েন্টের জন্য আলাদা থ্রেড তৈরি করা হয় এবং এটি প্রতিটি ক্লায়েন্টের বার্তা গ্রহণ করে।
  4. receive() ফাংশন: সার্ভার প্রতিটি নতুন ক্লায়েন্টের সংযোগ গ্রহণ করে এবং একটি থ্রেড তৈরি করে, যা তাদের বার্তা প্রেরণ ও গ্রহণ করে।

ক্লায়েন্ট কোড (client.py):

  1. ক্লায়েন্ট সেটআপ: socket ব্যবহার করে ক্লায়েন্ট সার্ভারের সাথে সংযোগ স্থাপন করে।
  2. Tkinter GUI: একটি চ্যাট ইন্টারফেস তৈরি করা হয়েছে যেখানে ব্যবহারকারী বার্তা পাঠাতে ও দেখতে পারবেন।
  3. send_message() ফাংশন: ব্যবহারকারীর ইনপুট গ্রহণ করে তা সার্ভারে প্রেরণ করে।
  4. receive_messages() ফাংশন: এই ফাংশনটি আলাদা একটি থ্রেডে চলবে এবং সার্ভার থেকে বার্তা গ্রহণ করে GUI-তে দেখাবে।

ধাপ ৩: অ্যাপ্লিকেশন চালানো

প্রথমে সার্ভার চালু করুন:

python server.py

তারপর একাধিক ক্লায়েন্ট চালাতে পারেন:

python client.py

উপসংহার

এই চ্যাট অ্যাপ্লিকেশনটি একটি মজাদার ও কার্যকরী প্রজেক্ট। এর মাধ্যমে Socket প্রোগ্রামিং এবং Tkinter এর ব্যবহার বোঝা যায়। অ্যাপটিতে আরও উন্নত ফিচার যোগ করা যেতে পারে যেমন:

  • প্রাইভেট চ্যাট: নির্দিষ্ট ক্লায়েন্টদের সাথে প্রাইভেট চ্যাটের সুবিধা।
  • ইমোজি সাপোর্ট: বার্তায় ইমোজি যোগ করার অপশন।
  • ফাইল শেয়ারিং: চ্যাটের মাধ্যমে ফাইল শেয়ার করার সুবিধা।

এই প্রজেক্টটি নেটওয়ার্কিং এবং GUI প্রোগ্রামিংয়ে দক্ষতা বৃদ্ধিতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...