Ответ
Сокет — это конечная точка для сетевого обмена данными. Основные типы различаются по протоколу и надежности:
-
Потоковые сокеты (SOCK_STREAM). Используют протокол TCP. Гарантируют надежную, упорядоченную доставку данных с установкой соединения.
import socket # Создание TCP-сокета tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect(('example.com', 80)) tcp_socket.send(b'GET / HTTP/1.1rnHost: example.comrnrn') -
Дейтаграммные сокеты (SOCK_DGRAM). Используют протокол UDP. Работают без установки соединения, быстрее, но не гарантируют доставку и порядок пакетов.
# Создание UDP-сокета udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.sendto(b'Hello', ('example.com', 1234)) -
Сырые сокеты (SOCK_RAW). Позволяют работать напрямую с сетевыми пакетами (например, для ICMP —
ping), минуя транспортный уровень (TCP/UDP). Требуют повышенных привилегий.
По домену (адресации):
- INET (AF_INET) — для IPv4.
- INET6 (AF_INET6) — для IPv6.
- UNIX (AF_UNIX) — для межпроцессного взаимодействия на одной машине (через файловую систему).
Ответ 18+ 🔞
А, ну вот, подъехали к сокетам, блядь. Слушай, это ж как двери в сетевой бордель, только вместо баб — данные летают. И двери эти, сука, разные бывают, как будто в сортире: одна — с гарантией, что твоё говно дойдёт до унитаза, а другая — так, на авось, в форточку выкинуть.
Вот смотри, первый тип, SOCK_STREAM, он же TCP. Это как заказное письмо с уведомлением, ёпта. Ты сначала рукопожатие устраиваешь, «здравствуйте-извините», а потом уже начинаешь свою простыню текста слать. И если где-то буква потеряется — её тебе назад пришлют, переспросят. Надёжно, блядь, но и тормознуто.
import socket
# Создание TCP-сокета
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.connect(('example.com', 80))
tcp_socket.send(b'GET / HTTP/1.1rnHost: example.comrnrn')
Видишь? Церемонно всё. connect, потом send. Порядок.
А второй тип, SOCK_DGRAM, он же UDP — это полная его противоположность, хитрая жопа. Ты стоишь на балконе, видишь соседа в окне напротив и просто кричишь: «Вася, водки есть?!» И кидаешь записку. Долетит — не долетит, прочитает — не прочитает, ответит — не ответит — тебе похуй. Быстро, да. Но доверия — ебать ноль.
# Создание UDP-сокета
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.sendto(b'Hello', ('example.com', 1234))
Всё, sendto и свободен. Никаких тебе рукопожатий, в рот меня чих-пых.
Ну и третий, SOCK_RAW — это уже для полных извращенцев, которые хотят ковыряться в потрохах пакетов своими руками. Хочешь свой ping написать или какую-нибудь сетевую хуйню отладить? Вот тебе сырой сокет, мудила, но будь готов, что система тебе скажет: «А ты кто такой, сука?» — и права админа потребует.
А ещё они, эти сокеты, по адресации различаются, блядь. Как квартиры:
- AF_INET — старый добрый IPv4, типа «улица Ленина, дом 5, кв. 3».
- AF_INET6 — новый, модный IPv6, адрес такой длинный, что им можно забор обнести: «2001:0db8:85a3:0000:0000:8a2e:0370:7334». Ебушки-воробушки.
- AF_UNIX — это вообще для домашних разборок. Когда два процесса на одной машине друг другу по мозгам ездят, но через файлик, а не по сети. Быстро, приватно, своя атмосфера.
Вот и вся философия, блядь. Выбирай дверь, которая под задачу, а то так и будешь вхолостую данные в стенку пихать.