Сокеты представляют собой интерфейс для взаимодействия между процессами через сеть. В Python модуль socket обеспечивает доступ к интерфейсу сокетов BSD, который доступен на всех современных системах Unix, Windows, MacOS и, возможно, на дополнительных платформах.
Создание сокета:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INET: Используется для интернет-адресов (IPV4).SOCK_STREAM: Указывает на использование TCP.domain, указывающий семейство протоколов создаваемого сокета. Этот параметр задает правила использования именования и формат адреса.
Например:
PF_INET для сетевого протокола IPv4PF_INET6 для IPv6PF_UNIX для локальных сокетов (используя файл)type один из:
SOCK_STREAM надёжная потокоориентированная служба (TCP) (сервис) или потоковый сокетSOCK_DGRAM служба датаграмм (UDP) или датаграммный сокетSOCK_SEQPACKET надёжная служба последовательных пакетовSOCK_RAW Сырой сокет — сырой протокол поверх сетевого уровня.Привязка сокета:
s.bind(('localhost', 8080))
Привязывает сокет к адресу и порту.
Прослушивание соединений:
s.listen(5)
Переход в режим прослушивания входящих соединений.
Принятие соединений:
conn, addr = s.accept()
Принимает входящее соединение и возвращает новое соединение и адрес клиента.
Подключение к серверу:
s.connect(('localhost', 8080))
Устанавливает соединение с сервером.
Отправка и получение данных:
s.sendall(b'Hello, world')
data = s.recv(1024)
Закрытие сокета:
s.close()
Блокирующий и неблокирующий сокеты устанавливаются с помощью метода setblocking() в Python. Для установки блокирующего сокета, вызовите setblocking(True). Для установки неблокирующего сокета, вызовите setblocking(False).
Пример:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Установка блокирующего сокета
s.setblocking(True)
# Установка неблокирующего сокета
s.setblocking(False)
Важно отметить, что при использовании неблокирующего сокета, методы вроде send(), recv(), accept() и connect() будут возвращать ошибку socket.error в случае, если они не могут быть немедленно выполнены.
Сокеты могут работать через различные протоколы, такие как TCP и UDP, каждый из которых имеет свои особенности в плане надежности, скорости и способов передачи данных.
http.server — это модуль Python, который позволяет создавать простой HTTP-сервер для разработки и тестирования. Он поддерживает HTTP/1.0 и HTTP/1.1 и предоставляет базовые возможности для страниц.