0
0
PythonHow-ToBeginner · 4 min read

How to Create Chat Application Using Python Socket

To create a chat application using python socket, you need to write a server that listens for connections and clients that connect to it. The server handles multiple clients using threads or loops, and clients send and receive messages through sockets.
📐

Syntax

The basic syntax involves creating a socket object, binding it to an address and port (for server), and connecting to the server (for client). You use socket.socket() to create a socket, bind() to assign an address, listen() to wait for clients, and accept() to accept connections. Clients use connect() to join the server. Data is sent and received using send() and recv().

python
import socket

# Server socket setup
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen()

# Client socket setup
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
💻

Example

This example shows a simple chat server that accepts multiple clients using threads and clients that send messages to the server. The server broadcasts messages to all connected clients.

python
import socket
import threading

clients = []

# Function to handle each client connection
def handle_client(client_socket):
    while True:
        try:
            message = client_socket.recv(1024).decode('utf-8')
            if not message:
                break
            print(f"Received: {message}")
            broadcast(message, client_socket)
        except:
            break
    clients.remove(client_socket)
    client_socket.close()

# Function to send message to all clients except sender
def broadcast(message, sender_socket):
    for client in clients:
        if client != sender_socket:
            try:
                client.send(message.encode('utf-8'))
            except:
                client.close()
                clients.remove(client)

# Server setup
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 5555))
server.listen()
print("Server started and listening...")

# Accept clients in a loop
while True:
    client_socket, addr = server.accept()
    print(f"Connected with {addr}")
    clients.append(client_socket)
    thread = threading.Thread(target=handle_client, args=(client_socket,))
    thread.start()
Output
Server started and listening... Connected with ('127.0.0.1', 12345) Received: Hello from client
⚠️

Common Pitfalls

  • Not handling client disconnections can cause the server to crash or hang.
  • Blocking calls like recv() without timeout can freeze the program.
  • Not using threads or async methods will prevent handling multiple clients simultaneously.
  • Forgetting to encode/decode messages causes errors when sending or receiving data.
python
import socket

# Wrong: Blocking recv without handling disconnect
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5555))
message = client_socket.recv(1024)  # If server disconnects, this blocks forever

# Right: Use try-except and decode
try:
    message = client_socket.recv(1024).decode('utf-8')
except ConnectionResetError:
    print('Server disconnected')
📊

Quick Reference

Socket methods for chat app:

  • socket.socket(): Create a socket
  • bind(address): Assign IP and port (server)
  • listen(): Wait for clients (server)
  • accept(): Accept client connection (server)
  • connect(address): Connect to server (client)
  • send(data): Send data
  • recv(buffer_size): Receive data
  • close(): Close socket

Key Takeaways

Use Python's socket module to create server and client sockets for chat communication.
Handle multiple clients with threads or asynchronous code to allow simultaneous chatting.
Always encode messages before sending and decode after receiving to avoid errors.
Manage client disconnections gracefully to keep the server stable.
Test your chat app locally before deploying to ensure connections and messaging work.