Skip to main content
The socket module provides access to the BSD socket interface.

Module Import

import socket

TCP Client

import socket

# Create TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect to server
sock.connect(('example.com', 80))

# Send data
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')

# Receive data
data = sock.recv(1024)
print(data.decode())

# Close socket
sock.close()

TCP Server

import socket

# Create TCP socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind to address
server.bind(('localhost', 8080))

# Listen for connections
server.listen(5)
print("Server listening on port 8080")

while True:
    # Accept connection
    client, address = server.accept()
    print(f"Connection from {address}")
    
    # Receive data
    data = client.recv(1024)
    
    # Send response
    client.send(b'HTTP/1.1 200 OK\r\n\r\nHello, World!')
    
    # Close client socket
    client.close()

UDP Socket

import socket

# UDP client
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b'Hello', ('localhost', 9999))
data, addr = client.recvfrom(1024)

# UDP server
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('localhost', 9999))

while True:
    data, addr = server.recvfrom(1024)
    print(f"Received from {addr}: {data}")
    server.sendto(b'ACK', addr)

Socket Options

import socket

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

# Set timeout
sock.settimeout(5.0)

# Reuse address
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# Get hostname
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
print(f"{hostname}: {ip}")
For high-level networking, use libraries like requests, httpx, or asyncio instead of raw sockets.

http

HTTP modules

urllib

URL handling

Build docs developers (and LLMs) love