Python Socket Programming
Introduction to Socket Programming
Socket programming is a fundamental technique for network communication in Python, allowing developers to create network applications that can send and receive data across different systems.
Socket Types and Characteristics
Socket Type |
Protocol |
Characteristics |
Use Cases |
TCP Socket |
Connection-oriented |
Reliable, ordered |
Web servers, file transfer |
UDP Socket |
Connectionless |
Fast, lightweight |
Real-time applications, gaming |
Basic Socket Communication Workflow
graph LR
A[Create Socket] --> B[Bind Address]
B --> C[Listen/Connect]
C --> D[Send/Receive Data]
D --> E[Close Socket]
TCP Server Example
import socket
def tcp_server():
## Create TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
## Bind to specific address and port
server_socket.bind(('localhost', 8000))
## Listen for incoming connections
server_socket.listen(1)
while True:
## Accept client connection
client_socket, address = server_socket.accept()
## Receive data
data = client_socket.recv(1024)
print(f"Received: {data.decode()}")
## Send response
client_socket.send("Message received".encode())
client_socket.close()
## Run server
tcp_server()
TCP Client Example
import socket
def tcp_client():
## Create TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
## Connect to server
client_socket.connect(('localhost', 8000))
## Send data
message = "Hello, Server!"
client_socket.send(message.encode())
## Receive response
response = client_socket.recv(1024)
print(f"Server response: {response.decode()}")
client_socket.close()
## Run client
tcp_client()
UDP Socket Communication
import socket
def udp_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('localhost', 8000))
while True:
data, address = server_socket.recvfrom(1024)
print(f"Received from {address}: {data.decode()}")
def udp_client():
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = "UDP Message"
client_socket.sendto(message.encode(), ('localhost', 8000))
Advanced Socket Programming Techniques
Error Handling
- Use try-except blocks
- Implement timeout mechanisms
- Handle network-related exceptions
- Use non-blocking sockets
- Implement threading for concurrent connections
- Optimize buffer sizes
Note: LabEx provides comprehensive environments for practicing advanced socket programming techniques.