0% found this document useful (0 votes)
14 views40 pages

Text Messenger App Project Report

The document outlines a project for a Text Messenger Application developed by students for their Computer Science practical examination in the academic year 2025-2026. It details the project's objectives, methodology, and design, including the use of Python, Tkinter for the GUI, socket programming for networking, and MySQL for database management. The application allows real-time messaging between users and incorporates features such as user authentication, chat history, and a user-friendly interface.

Uploaded by

c12mahaan2806
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views40 pages

Text Messenger App Project Report

The document outlines a project for a Text Messenger Application developed by students for their Computer Science practical examination in the academic year 2025-2026. It details the project's objectives, methodology, and design, including the use of Python, Tkinter for the GUI, socket programming for networking, and MySQL for database management. The application allows real-time messaging between users and incorporates features such as user authentication, chat history, and a user-friendly interface.

Uploaded by

c12mahaan2806
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

SSCE PRACTICAL EXAMINATION 2025-26

COMPUTER SCIENCE

(083) PROJECT

FILE ON

Text Messenger Application

PR0JECT PREPARED BY :
1. GUGAN KARTHICK S
2. VISHAL S
3. CHRISTEIN VALENTINO C

ACADEMIC YEAR: 2025-2026


1
NARAYANA E-TECHNO SCHOOL-
VELLORE
CERTIFICATE
This is to certify that Master/Miss
of class XII,
Register no. has satisfactorily
completed the project in Computer science on
and
submitted the same during the practical examination
held on for the ALSSCE course in the
school during the academic year 2025-2026. I have
examined the project and here by accord my
approval of it as a study carried out and presented in
the manner required for its acceptance.

INTERNAL EXAMINER EXTERNAL


EXAMINER

PRINCIPAL

2
ACKNOWLEDGEMENT
I wish to express my profound
thanks to my institution NARAYANA E-TECHNO
SCHOOL, VELLORE for having enabled me to take
COMPUTER SCIENCE group in Class XII.
I would also like to express my gratitude to the
Management, Principal Mr. K. KIRAN KUMAR for
their continuous support which enabled me to complete
my project successfully.
My sincere thanks to Mrs. TAMILSELVI.S A guide,
Mentor all the above a friend, who critically reviewed
my project and helped in solving each and every
problem, occurred during implementation of the project.
Last but not the least, I would like to thank my family
members and friends and all those who helped me to
complete my project successfully

BY
------------------------

3
Table of content:
[Link] TOPIC PAGE.
. NO.
01 TITLE 01
02 CERTIFICATE 02
03 ACKNOWLEDGEMENT 03
04 INTRODUCTION 05
05 REQUIREMENTS 07
06 OBJECTIVES 08
07 METHODOLOGY AND 10
DESIGN
08 SOURCE CODE 12
09 OUTPUT 33
10 USES 37
11 CONCLUSION 37
12 FURTHER 38
DEVELOPMENT
OPTIONS
13 BIBLIOGRAPHY 39

4
Introduction:
The project titled “Text Messenger Application” is a real-
time messaging system developed in Python. The aim of this
project is to provide a simple yet functional platform for
communication between multiple users. Unlike static
programs, this project emphasizes interactive and dynamic
communication, where messages are exchanged instantly
through a client-server model.
The application integrates three major technologies:
 Tkinter for the Graphical User Interface (GUI),
allowing users to interact with the system through
windows, buttons, and text areas.
 Socket Programming for real-time networking,
enabling clients to send and receive data through a server.
 MySQL Database for data persistence, used to securely
store user login credentials and maintain chat history.
The project is divided into three main modules:
1. Login & Signup Module
o This module allows new users to register and existing

users to log in with their credentials.


o It connects with the MySQL database to verify

authenticity and prevent duplicate registrations.


o Password security is ensured by database storage

mechanisms, and only authenticated users can


proceed to the chat interface.
2. Server Module
o The server is the central hub of the application.

5
o It manages multiple connections simultaneously
using threading, ensuring that one user’s activity
does not block others.
o The server receives messages from a sender and

forwards them to the appropriate recipient in real


time.
3. Client Module
o The client application provides the user interface for

chatting.
o It features a login window, a signup option, and the

main chat window where messages are exchanged.


o Users can see their contacts, view previous chat

messages, and continue conversations seamlessly.


This project reflects several key computer science concepts
such as network communication, event-driven
programming, concurrency (via threading), and database
management. It also bridges the gap between theory and
practice, showing how real-world applications like WhatsApp,
Telegram, or Messenger are built on similar principles.
The Chat Application can be extended further into a more
robust system by adding features like file sharing, emojis,
online deployment, or message encryption. However, even in
its current form, it provides a clear demonstration of a real-
world software system that handles authentication,
communication, and data storage effectively.

6
REQUIREMENTS:

Hardware Requirements:
1. Printer, to print the required documents of the
project.

2. Compact drive.

3. Processor INTEL CORE 2 DUO

4. Ram:1gb

5. Hard disk: 160 GB

Software Requirements:
 Programming Language: Python (3.8 or later)
 Backend Database: MySQL (8.0 or later)
 Libraries/Modules:
o [Link] (for database connectivity)

o socket (for server-client communication under LAN)

o threading (for real-time chat)

o tkinter / customtkinter (for GUI )

o firewall rules (system-level setup for security)

7
Objectives:
The main objectives of the Chat Application project are:
1. To implement a client-server communication system
o Establish a connection between multiple clients and a

central server using Python socket programming.


o Enable seamless exchange of messages in real time.

2. To design a user-friendly interface


o Use Tkinter to build windows for login, signup, and

chatting.
o Provide easy navigation and a clear layout for better

user experience.
3. To integrate a database for authentication and storage
o Store user credentials (username, password) securely

in MySQL.
o Maintain chat history so users can view their past

conversations.
4. To apply multithreading for concurrency
o Ensure that multiple users can chat simultaneously

without interruption.
o Handle multiple client requests efficiently through

threading.

5. To demonstrate real-world application development


concepts
o Apply programming concepts such as GUI design,

networking, and database integration.

8
o Create a project that is not only academic but also
practically useful.
6. To lay the foundation for advanced communication
systems
o Provide scope for future features like multimedia

sharing, emojis, cloud deployment, and end-to-end


encryption.

9
Methodology and Design:
The Chat Application was developed using a structured
approach based on the client-server architecture. The system
consists of three main components:
1. Login & Signup Module
o Handles user authentication through MySQL.

o Allows new users to register and existing users to log

in.
2. Server Module
o Built using Python socket programming.

o Manages multiple clients simultaneously with


threading.
o Receives messages from one client and forwards

them to the intended recipient.


3. Client Module
o Provides a Tkinter-based GUI for login and chat.

o Connects to the server and allows real-time


messaging.
o Displays messages in the chat window with
timestamps.

Workflow:
 User signs up or logs in.
 The client connects to the server.
 The server authenticates the user.

10
 Messages are sent and received in real time through the
server.
 Chat history is stored in the database.
This design ensures real-time communication, secure
authentication, and data storage, while also keeping the
interface simple and user-friendly.

11
SOURCE CODE:
I. Python:
1. Server Module ([Link])
#server

import socket
import threading
import [Link]

# Connect to MySQL
import [Link]

db = [Link](
host="localhost",
user="root",
password="guganshivani",
database="chat_app",
port=3306,
ssl_disabled=True # 👈 important
)

cursor = [Link]()

# Server setup
HOST = 'localhost'
PORT = 5555

server = [Link](socket.AF_INET, socket.SOCK_STREAM)


[Link]((HOST, PORT))
[Link]()

clients = []
12
nicknames = []

# Broadcast message to all clients

def broadcast(message, sender=None):


for client in clients:
[Link](message)
if sender:
# Store message in database
try:
[Link]("INSERT INTO messages (sender, message)
VALUES (%s, %s)", (sender, [Link]()))
[Link]()
except [Link] as err:
print(f"Database Error: {err}")

# Handle individual client

def handle(client):
while True:
try:
msg = [Link](1024)
if msg:
index = [Link](client)
sender = nicknames[index]
print(f"{sender}: {[Link]()}")
broadcast(msg, sender)
except:
index = [Link](client)
[Link]()
nickname = [Link](index)
[Link](client)
broadcast(f"{nickname} left the chat.".encode())
break
13
# Accept new clients
def receive():
print(f"Server started on {HOST}:{PORT}...")
while True:
client, address = [Link]()
print(f"Connected with {str(address)}")

# Request and receive nickname (username)


[Link]("NICKNAME".encode())
nickname = [Link](1024).decode()
[Link](nickname)
[Link](client)

print(f"Nickname is {nickname}")
broadcast(f"{nickname} joined the chat!".encode())
[Link]("Connected to the server!".encode())

thread = [Link](target=handle, args=(client,))


[Link]()

# Run server
receive()

14
2. Client Module ([Link])
# CHAT CLIENT (WhatsAbove Messenger with History, Search &
Bubbles)

import socket
import threading
import tkinter as tk from datetime import datetime
import [Link]

HOST = "localhost"
PORT = 5555

# Database connection
db = [Link](
host="localhost",
user="root",
password="guganshivani", # replace with your password
database="chat_app"
)
cursor = [Link]()

class ChatClient:
def __init__(self, username):
[Link] = username
self.current_chat = None
[Link] = {} # {contact: [(sender, msg, timestamp), ...]}

# Connect to server
[Link] = [Link](socket.AF_INET,
socket.SOCK_STREAM)
[Link]((HOST, PORT))
[Link]([Link]())

# Tkinter window
[Link] = [Link]()
[Link](f"WhatsAbove - {username}")
15
[Link]("850x550")
[Link](bg="#1e1e2e")
[Link](False, False)

# -----------------
# Sidebar
# -----------------
[Link] = [Link]([Link], bg="#2d2d3a", width=200)
[Link](side="left", fill="y")

# WhatsAbove logo at top


[Link](
[Link],
text="WhatsAbove",
font=("Helvetica", 20, "bold"),
fg="#00ffcc",
bg="#2d2d3a"
).pack(pady=(15, 10))

# Contacts title slightly lower


[Link](
[Link],
text="Contacts",
font=("Arial", 14, "bold"),
bg="#2d2d3a",
fg="#ffffff"
).pack(pady=(20, 5))

self.contacts_frame = [Link]([Link], bg="#2d2d3a")


self.contacts_frame.pack(fill="y", expand=True)

# -----------------
# Chat frame
# -----------------
self.chat_frame = [Link]([Link], bg="#1e1e2e")
self.chat_frame.pack(side="right", fill="both", expand=True)
16
# Search bar
search_frame = [Link](self.chat_frame, bg="#1e1e2e")
search_frame.pack(fill="x", padx=10, pady=5)

self.search_entry = [Link](
search_frame,
font=("Arial", 11),
bg="#3a3a4f",
fg="white",
insertbackground="white",
relief="flat"
)
self.search_entry.pack(side="left", fill="x", expand=True, padx=(0,
5), ipady=4)

[Link](
search_frame,
text="Search",
command=self.search_messages,
font=("Arial", 10, "bold"),
bg="#00ffcc",
fg="black",
relief="flat",
cursor="hand2"
).pack(side="right")

# -----------------
# Chat area (Canvas for bubbles)
# -----------------
self.chat_canvas_frame = [Link](self.chat_frame, bg="#1e1e2e")
self.chat_canvas_frame.pack(fill="both", expand=True, padx=15,
pady=5)

self.chat_canvas = [Link](self.chat_canvas_frame, bg="#1e1e2e",


highlightthickness=0)
self.chat_scrollbar = [Link](self.chat_canvas_frame,
orient="vertical", command=self.chat_canvas.yview)
17
self.chat_canvas.configure(yscrollcommand=self.chat_scrollbar.set)

self.chat_scrollbar.pack(side="right", fill="y")
self.chat_canvas.pack(side="left", fill="both", expand=True)

self.msg_container = [Link](self.chat_canvas, bg="#1e1e2e")


self.chat_canvas.create_window((0, 0), window=self.msg_container,
anchor="nw")

self.msg_container.bind("<Configure>", lambda e:
self.chat_canvas.configure(scrollregion=self.chat_canvas.bbox("all")))

self.last_self_message = None # For skipping duplicates

# Message entry + send button


bottom = [Link](self.chat_frame, bg="#1e1e2e")
[Link](fill="x", pady=5)

self.msg_entry = [Link](
bottom,
font=("Arial", 11),
bg="#3a3a4f",
fg="white",
insertbackground="white",
relief="flat"
)
self.msg_entry.pack(side="left", padx=(10, 5), pady=10, ipady=6,
fill="x", expand=True)
self.msg_entry.bind("<Return>", self.send_message)

self.send_button = [Link](
bottom,
text="Send",
command=self.send_message,
font=("Arial", 10, "bold"),
bg="#00ffcc",
fg="black",
18
activebackground="#00cca3",
activeforeground="white",
relief="flat",
cursor="hand2"
)

self.send_button.pack(side="right", padx=(5, 10), pady=10,


ipadx=15, ipady=5)

# Load contacts and histories


self.load_contacts()
self.prefetch_histories()

# Start receiving
[Link](target=[Link], daemon=True).start()
[Link]()

# ---------------------------
# Contacts & Histories
# ---------------------------
def load_contacts(self):
for widget in self.contacts_frame.winfo_children():
[Link]()

[Link]("SELECT username FROM users WHERE username


!= %s", ([Link],))
users = [Link]()

for (user,) in users:


btn = [Link](
self.contacts_frame,
text=user,
font=("Arial", 11, "bold"),
bg="#3a3a4f",
fg="white",
activebackground="#00cca3",
activeforeground="black",
relief="flat",
19
cursor="hand2",
command=lambda u=user: self.open_chat(u)
)
[Link](fill="x", pady=2, padx=5)

def prefetch_histories(self):
"""Load all chats involving this user from DB"""

[Link](
"""
SELECT sender, receiver, message, timestamp
FROM messages
WHERE sender=%s OR receiver=%s
ORDER BY timestamp
""",
([Link], [Link])
)
rows = [Link]()

for sender, receiver, msg, ts in rows:


contact = receiver if sender == [Link] else sender
if contact not in [Link]:
[Link][contact] = []
[Link][contact].append((sender, msg, ts))

# ---------------------------
# Chat display
# ---------------------------
def open_chat(self, contact):
self.current_chat = contact
for widget in self.msg_container.winfo_children():
[Link]()

if contact in [Link]:
for sender, msg, ts in [Link][contact]:
self.display_message(sender, msg)
else:
self.display_message("", f"--- No history with {contact} ---")
20
def display_message(self, sender, msg):
# Skip duplicate self messages
if sender == [Link] and msg == self.last_self_message:
return
if sender == [Link]:
self.last_self_message = msg

bubble_bg = "#00ffcc" if sender == [Link] else "#44475a"


fg_color = "black" if sender == [Link] else "white"
anchor_side = "e" if sender == [Link] else "w"

bubble_frame = [Link](self.msg_container, bg="#1e1e2e",


pady=2)
bubble_frame.pack(anchor=anchor_side, fill="x", pady=3, padx=5)

msg_label = [Link](
bubble_frame,
text=msg,
font=("Arial", 11),
bg=bubble_bg,
fg=fg_color,
wraplength=350,
justify="left" if sender != [Link] else "right",
padx=10,
pady=5
)
msg_label.pack(anchor=anchor_side)

# Timestamp
timestamp = [Link]().strftime("%H:%M")
ts_label = [Link](
bubble_frame,
text=timestamp,
font=("Arial", 7),
bg="#1e1e2e",
21
fg="white"
)
ts_label.pack(anchor="e" if sender == [Link] else "w",
padx=5)

# Auto-scroll
self.chat_canvas.update_idletasks()
self.chat_canvas.yview_moveto(1.0)

# ---------------------------
# Messaging
# ---------------------------
def send_message(self, event=None):
msg = self.msg_entry.get().strip()
if msg and self.current_chat:
formatted_msg = f"{[Link]} → {self.current_chat}: {msg}"
[Link](formatted_msg.encode())

# Save locally in histories


if self.current_chat not in [Link]:
[Link][self.current_chat] = []
[Link][self.current_chat].append(([Link], msg,
None))

self.display_message([Link], msg)
self.msg_entry.delete(0, [Link])

def receive(self):
while True:
try:
message = [Link](1024).decode()
if not message:
continue

# Parse message in the format: "sender → receiver: msg"


22
if "→" in message and ":" in message:
header, msg = [Link](":", 1)
sender = [Link]("→")[0].strip()
receiver = [Link]("→")[1].strip()
msg = [Link]()

else:
sender = ""
msg = [Link]()
receiver = ""

# Ignore messages sent by yourself


if sender == [Link]:
continue

# Determine which contact the message belongs to


contact = sender
if contact not in [Link]:
[Link][contact] = []
[Link][contact].append((sender, msg, None))

# Only display if currently chatting with this contact


if self.current_chat == contact:
self.display_message(sender, msg)

except Exception as e:
print("Receive error:", e)
break

# ---------------------------
# Search
# ---------------------------
def search_messages(self):
keyword = self.search_entry.get().strip()
23
for widget in self.msg_container.winfo_children():
# Reset background of all labels
for lbl in widget.winfo_children():
if isinstance(lbl, [Link]):
[Link](bg=[Link]["bg"])

if not keyword or not self.current_chat:


return

for widget in self.msg_container.winfo_children():


for lbl in widget.winfo_children():
if isinstance(lbl, [Link]):
if [Link]() in [Link]("text").lower():
[Link](bg="yellow", fg="black")

def start_chat(username):
ChatClient(username)

24
3. Login Module ([Link])
# LOGIN (Enhanced UI for WhatsAbove)

import tkinter as tk
from tkinter import messagebox
import [Link]
import signup # External signup script
import chat_client

# Connect to MySQL
db = [Link](
host="localhost",
user="root",
password="guganshivani", # Replace with your password
database="chat_app"
)
cursor = [Link]()

class LoginApp:
def __init__(self, master):
[Link] = master
[Link]("WhatsAbove - Login")
[Link]("420x350")
[Link](bg="#1e1e2e") # Dark background
[Link](False, False)

# Center frame (card style)


[Link] = [Link](master, bg="#2d2d3a", bd=2, relief="ridge")
[Link](relx=0.5, rely=0.5, anchor="center", width=360,
height=280)

# Logo / App Title


[Link] = [Link](
[Link],
text="WhatsAbove",
font=("Helvetica", 20, "bold"),
25
fg="#00ffcc",
bg="#2d2d3a"
)
[Link](pady=(15, 10))

# Username
[Link](
[Link], text="Username:", font=("Arial", 11),
bg="#2d2d3a", fg="white"
).pack(pady=(5, 2))
self.username_entry = [Link](
[Link], font=("Arial", 11),
bg="#3a3a4f", fg="white", insertbackground="white", relief="flat"
)
self.username_entry.pack(ipady=5, pady=(0, 10), fill="x", padx=40)

# Password
[Link](
[Link], text="Password:", font=("Arial", 11),
bg="#2d2d3a", fg="white"
).pack(pady=(5, 2))
self.password_entry = [Link](
[Link], show="*", font=("Arial", 11),
bg="#3a3a4f", fg="white", insertbackground="white", relief="flat"
)
self.password_entry.pack(ipady=5, pady=(0, 15), fill="x", padx=40)

# Buttons
self.login_btn = [Link](
[Link], text="Login", command=[Link],
font=("Arial", 11, "bold"),
bg="#00ffcc", fg="black",
activebackground="#00cca3", activeforeground="white",
relief="flat", cursor="hand2"
)
self.login_btn.pack(pady=(0, 8), ipadx=20, ipady=5)
26
self.signup_btn = [Link](
[Link], text="Sign Up", command=self.open_signup,
font=("Arial", 10, "bold"),
bg="#44475a", fg="white",
activebackground="#5a5f7a",
activeforeground="white",relief="flat", cursor="hand2")
self.signup_btn.pack(ipady=4, ipadx=15)

def login(self):
username = self.username_entry.get()
password = self.password_entry.get()

[Link]("SELECT * FROM users WHERE username = %s


AND password = %s", (username, password))
result = [Link]()

if result:
[Link]("Login Success", f"Welcome,
{username}!")
[Link]()
chat_client.start_chat(username)
else:
[Link]("Login Failed", "Invalid username or
password.")

def open_signup(self):
[Link]() # Hide login window
signup.show_signup([Link])

if __name__ == "__main__":
root = [Link]()
app = LoginApp(root)
[Link]()

27
4. Signup Module ([Link])
# SIGN-UP (Enhanced UI for WhatsAbove)

import tkinter as tk
from tkinter import messagebox
import [Link]
import re

# MySQL connection
db = [Link](
host="localhost",
user="root",
password="guganshivani",
database="chat_app"
)
cursor = [Link]()

def show_signup(parent_window):
signup_win = [Link]()
signup_win.title("WhatsAbove - Sign Up")
signup_win.geometry("420x420")
signup_win.configure(bg="#1e1e2e")
signup_win.resizable(False, False)

# When signup closes, show login again


signup_win.protocol("WM_DELETE_WINDOW", lambda:
(signup_win.destroy(), parent_window.deiconify()))

# Card frame
frame = [Link](signup_win, bg="#2d2d3a", bd=2, relief="ridge")
[Link](relx=0.5, rely=0.5, anchor="center", width=360,
height=360)

# Logo
logo = [Link](
frame,
28
text="WhatsAbove",
font=("Helvetica", 20, "bold"),

fg="#00ffcc",
bg="#2d2d3a"
)
[Link](pady=(15, 10))

# Account Number
[Link](frame, text="Account Number (10 digits):", font=("Arial", 11),
bg="#2d2d3a", fg="white").pack(pady=(5, 2))
account_entry = [Link](frame, font=("Arial", 11), bg="#3a3a4f",
fg="white", insertbackground="white", relief="flat")
account_entry.pack(ipady=5, pady=(0, 10), fill="x", padx=40)

# Username
[Link](frame, text="Username:", font=("Arial", 11), bg="#2d2d3a",
fg="white").pack(pady=(5, 2))
username_entry = [Link](frame, font=("Arial", 11), bg="#3a3a4f",
fg="white", insertbackground="white", relief="flat")
username_entry.pack(ipady=5, pady=(0, 10), fill="x", padx=40)

# Password
[Link](frame, text="Password:", font=("Arial", 11), bg="#2d2d3a",
fg="white").pack(pady=(5, 2))
password_entry = [Link](frame, show="*", font=("Arial", 11),
bg="#3a3a4f", fg="white", insertbackground="white", relief="flat")
password_entry.pack(ipady=5, pady=(0, 15), fill="x", padx=40)

# Register button
def register():
account = account_entry.get()
username = username_entry.get()
password = password_entry.get()

29
if not [Link](r"\d{10}", account):
[Link]("Invalid", "Account number must be 10
digits.")
return

if not username or not password:


[Link]("Error", "All fields are required.")
return

# Check uniqueness
[Link]("SELECT * FROM users WHERE account_number =
%s OR username = %s", (account, username))
if [Link]():
[Link]("Error", "Account or Username already
exists.")
return

# Save user
[Link]("INSERT INTO users (account_number, username,
password) VALUES (%s, %s, %s)",
(account, username, password))
[Link]()

[Link]("Success", "Registration successful!")


signup_win.destroy()
parent_window.deiconify() # Show login again

signup_btn = [Link](
frame, text="Register", command=register,
font=("Arial", 11, "bold"),
bg="#00ffcc", fg="black",
activebackground="#00cca3", activeforeground="white",
relief="flat", cursor="hand2"
)
30
signup_btn.pack(pady=(5, 10), ipadx=20, ipady=5)

# Back button
def back_to_login():
signup_win.destroy()
parent_window.deiconify()

back_btn = [Link](
frame, text="Back to Login", command=back_to_login,
font=("Arial", 10, "bold"),
bg="#44475a", fg="white",
activebackground="#5a5f7a", activeforeground="white",
relief="flat", cursor="hand2"
)
back_btn.pack(ipady=4, ipadx=15)

31
[Link]:
1) Messages Table:
CREATE TABLE messages (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

sender VARCHAR(50) NOT NULL,

receiver VARCHAR(50) NOT NULL,

message TEXT NOT NULL,

timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

is_read TINYINT(1) DEFAULT 0 );

2) Users Table :
CREATE TABLE Users (

account_number VARCHAR(10) NOT NULL PRIMARY KEY,

username VARCHAR(50) UNIQUE NOT NULL,

password VARCHAR(255) NOT NULL );

32
OUTPUT AND SCREENSHOTS:
Login Screen:

Sign Up Screen:

33
Error Messages:

CLIENT PAGE (CHATTING PAGE):

34
MySQL Outputs:
Table Structure:

Users table:

35
Messages Table:

36
Uses:
 Educational: Helps students understand socket
programming, MySQL integration, and GUI
development.
 Business/Organizations: Can be used as a secure in-
office LAN messenger.
 Secure Chat: Since it works only under LAN, it avoids
external data leaks.

Conclusion and Future Scopes:


The WhatsAbove Messenger successfully implements a real-
time chat application using Python (Tkinter for GUI, Sockets
for networking, and MySQL for database management). It
provides user authentication, contact management, and chat
history storage, ensuring reliability and usability. The project
demonstrates how core concepts of client-server
communication, database integration, and GUI design can be
combined to build a functional messenger system.

37
Further Development Options:
1. Enhanced Security
o Add end-to-end encryption for messages.

o Use hashed + salted passwords (e.g., bcrypt).

o Implement two-factor authentication.

2. Media Sharing
o Support images, audio, and file transfer along with

text messages.
3. Cloud Integration
o Host the server on cloud platforms (AWS, Azure, and

GCP) for scalability.


o Use Firebase/NoSQL for faster storage and retrieval.

4. Cross-Platform Support
o Build mobile apps (Android/iOS) using Flutter or

React Native.
o Provide a web version using Django/Flask with Web

Sockets.
5. User Experience Improvements
o Dark/light mode themes.

o Improved notification system.

o Group chat and broadcast features.

6. AI Features
o Smart message suggestions and auto-replies.

o Spam and abusive content detection.

These are the practically possible ideas for the further


development of the application using modern tools and
supports like AI and etc…

38
Bibliography:
1) Google.

2) Wikipedia.

3) Sumita Aurora CS Book.

4) Tkinter Reference Guide.

5)YouTube.

39
THANK YOU

40

You might also like