Practical Network Programming in Python: Sockets and HTTP

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()

Tags: python Sockets HTTP Requests threading

Posted on Tue, 19 May 2026 22:51:16 +0000 by renzaho