Socket Programming Basics
Socket communication enables direct network data transfer between applicatinos. Python's socket module provides essential functionality for creating network connections:
Server Implementation
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 54321
server.bind((host, port))
server.listen(3)
while True:
connection, address = server.accept()
print(f"Connection from: {address}")
welcome = "Socket server connection established!"
connection.send(welcome.encode('utf-8'))
connection.close()
Client Implementation
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 54321
client.connect((host, port))
response = client.recv(1024)
print(response.decode('utf-8'))
client.close()
HTTP Protocol Implementation
Python's requests library simplifies HTTP interactions:
GET Request Example
import requests
api_endpoint = 'https://api.github.com'
result = requests.get(api_endpoint)
print(f"Status: {result.status_code}")
print(f"Content: {result.text[:100]}...")
POST Request Example
import requests
service_url = 'https://httpbin.org/post'
payload = {'username': 'test_user', 'access_level': 'standard'}
result = requests.post(service_url, data=payload)
print(f"Status: {result.status_code}")
print(f"Response: {result.json()}")
Interactive Socket Communication
Sockets enable bidirectional message exchange:
Chat Server
import socket
chat_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 54322
chat_server.bind((host, port))
chat_server.listen(1)
print("Awaiting connection...")
client_link, client_addr = chat_server.accept()
while True:
received = client_link.recv(1024).decode('utf-8')
if not received:
break
print(f"Client: {received}")
reply = input("Server: ")
client_link.send(reply.encode('utf-8'))
client_link.close()
Chat Client
import socket
chat_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 54322
chat_client.connect((host, port))
while True:
message = input("Client: ")
chat_client.send(message.encode('utf-8'))
response = chat_client.recv(1024).decode('utf-8')
print(f"Server: {response}")
chat_client.close()
Cocnurrent Socket Handling
Threading enables handling multiple client connections simultaneously:
import socket
import threading
def manage_client(conn):
while True:
data = conn.recv(1024).decode('utf-8')
if not data:
break
print(f"Received: {data}")
response = input("Reply: ")
conn.send(response.encode('utf-8'))
conn.close()
main_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 54323
main_server.bind((host, port))
main_server.listen(5)
print("Server ready for connections")
while True:
client_conn, client_addr = main_server.accept()
print(f"New connection: {client_addr}")
handler = threading.Thread(target=manage_client, args=(client_conn,))
handler.start()