Ответ
Сетевое программирование в Python позволяет создавать приложения, которые обмениваются данными по сети. В основе лежит модель клиент-сервер и использование сокетов. Существуют разные уровни абстракции для работы с сетью.
1. Низкоуровневый подход: модуль socket
Модуль socket
предоставляет прямой доступ к C API для работы с сетевыми сокетами. Он позволяет реализовать любой протокол, но требует ручного управления соединением, отправкой и получением данных в виде байтов.
Пример: простой TCP-сервер и клиент
server.py
import socket
# AF_INET: IPv4, SOCK_STREAM: TCP
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('127.0.0.1', 65432)) # Привязка к адресу и порту
s.listen() # Перевод сокета в режим прослушивания
conn, addr = s.accept() # Принятие входящего подключения
with conn:
print(f"Подключено: {addr}")
data = conn.recv(1024) # Получение данных (до 1024 байт)
conn.sendall(b'Hello, client!') # Отправка ответа
client.py
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('127.0.0.1', 65432)) # Подключение к серверу
s.sendall(b'Hello, world') # Отправка данных
data = s.recv(1024)
print(f"Получено от сервера: {data.decode('utf-8')}")
2. Высокоуровневый подход: библиотеки
Для стандартных протоколов, таких как HTTP, существуют библиотеки, которые скрывают сложность работы с сокетами.
requests
: Де-факто стандарт для создания HTTP-клиентов. Упрощает отправку GET, POST и других запросов.aiohttp
,httpx
: Для асинхронного сетевого взаимодействия с использованиемasyncio
.FastAPI
,Flask
,Django
: Фреймворки для создания веб-серверов, которые полностью абстрагируют работу с сетью на уровне HTTP.