๐Ÿงต Python Tutorial โ€” Socket Programming (Client & Server)

Introduction ๐ŸŒŸ

Socket Programming allows two devices (client & server) to communicate over a network. Sockets provide low-level networking access based on TCP/UDP protocols.

Note

๐Ÿ’ก TCP โ†’ reliable, connection-oriented
๐Ÿ’ก UDP โ†’ fast, connectionless
๐Ÿ’ก Python provides socket module built-in

1. Importing the socket module ๐Ÿ“ฆ

import_socket.py

import socket

โœ” This module enables all networking operations.

2. Types of Sockets ๐Ÿงฉ

Socket TypeDescription
TCP (SOCK_STREAM)Reliable, ordered communication
UDP (SOCK_DGRAM)No guarantee, faster communication

3. Creating a TCP Server ๐Ÿ–ฅ๏ธ

tcp_server.py

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind(("localhost", 9999))
server.listen()

print("Server running...")

conn, addr = server.accept()
print("Connected:", addr)

conn.send(b"Hello from server!")
conn.close()

โœ” bind() โ†’ assign IP & port
โœ” listen() โ†’ start waiting for client
โœ” accept() โ†’ return new connection object

4. Creating a TCP Client ๐Ÿ’ป

tcp_client.py

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost", 9999))

data = client.recv(1024)
print("Received:", data.decode())

client.close()

โœ” connect() initiates a connection
โœ” recv() reads server message

5. Two-Way Communication ๐Ÿ”

two_way_server.py

# Server
import socket
server = socket.socket()
server.bind(("localhost", 9999))
server.listen()

conn, addr = server.accept()
print("Connected:", addr)

msg = conn.recv(1024).decode()
print("Client:", msg)

conn.send("Message received!".encode())
conn.close()

two_way_client.py

# Client
import socket
client = socket.socket()
client.connect(("localhost", 9999))

client.send("Hello server!".encode())
print(client.recv(1024).decode())

client.close()

6. Handling Multiple Clients (Threaded Server) ๐Ÿงต๐Ÿงต

threaded_server.py

import socket
import threading

def handle_client(conn, addr):
    print("New connection:", addr)
    conn.send(b"Welcome!")
    conn.close()

server = socket.socket()
server.bind(("localhost", 9999))
server.listen()

print("Server running...")

while True:
    conn, addr = server.accept()
    thread = threading.Thread(target=handle_client, args=(conn, addr))
    thread.start()

โœ” Each client handled by a separate thread

7. UDP Server & Client โšก

UDP Server

udp_server.py

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(("localhost", 9999))

print("UDP server running...")

while True:
    msg, addr = server.recvfrom(1024)
    print("Received:", msg.decode(), "from", addr)
    server.sendto(b"Hello via UDP!", addr)

UDP Client

udp_client.py

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

client.sendto(b"Hi UDP server!", ("localhost", 9999))
data, addr = client.recvfrom(1024)

print("Reply:", data.decode())

โœ” No connection steps
โœ” Uses sendto() & recvfrom()

8. Closing Sockets Properly ๐Ÿ”š

close_socket.py

client.close()
server.close()

9. Real-World Example โ€” Simple Chat App ๐Ÿ’ฌ

chat_server.py

import socket
import threading

def handle(c):
    while True:
        msg = c.recv(1024)
        if not msg: break
        print("Client:", msg.decode())

server = socket.socket()
server.bind(("localhost", 9999))
server.listen()

print("Chat server started...")

while True:
    conn, addr = server.accept()
    threading.Thread(target=handle, args=(conn,)).start()

chat_client.py

import socket

client = socket.socket()
client.connect(("localhost", 9999))

while True:
    msg = input("You: ")
    client.send(msg.encode())

10. Important Socket Functions ๐Ÿงฐ

FunctionDescription
bind()Attach IP & port
listen()Start listening for connections
accept()Accept a client
connect()Client connects to server
send()Send data
recv()Receive data
close()Close connection

Best Practices ๐Ÿ’ก

  • โœ” Always close sockets after use
  • โœ” Use threads for multiple clients
  • โœ” Add timeouts to prevent hanging
  • โœ” Use TCP for reliable data, UDP for speed
  • โœ” Sanitize input when sending dynamic content

Conclusion ๐ŸŽ‰

>>โ€œSocket programming gives you low-level control to build custom network apps like chat systems, games, servers, and IoT services.โ€ โœจ

You now understand Socket Programming in Python! Want the next topic? Try Async Socket Programming, WebSockets, FastAPI WebSockets, or TCP/IP Deep Dive. Just tell me! ๐Ÿ˜Š