๐งต 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
๐ก 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 Type | Description |
|---|---|
| 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 ๐งฐ
| Function | Description |
|---|---|
| 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! ๐