Что такое сокет (socket) в программировании?

«Что такое сокет (socket) в программировании?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сокет (Socket) — это конечная точка для двустороннего обмена данными между процессами по сети. Он связывает IP-адрес хоста и номер порта, позволяя программам общаться по протоколам TCP или UDP.

Основные типы сокетов:

  1. Потоковые сокеты (SOCK_STREAM): Используют протокол TCP. Гарантируют надежную, упорядоченную доставку данных с предварительным установлением соединения.
  2. Дейтаграммные сокеты (SOCK_DGRAM): Используют протокол UDP. Отправляют данные без установки соединения, быстрее, но без гарантий доставки и порядка.

Простой пример TCP-клиента и сервера на Python:

server.py (Сервер)

import socket

# Создание TCP/IP сокета
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Привязка сокета к адресу и порту
server_socket.bind(('127.0.0.1', 65432))
# Начало прослушивания входящих соединений
server_socket.listen()
print("Сервер запущен и ожидает подключений...")

# Принятие соединения
connection, client_address = server_socket.accept()
with connection:
    print(f'Подключен клиент: {client_address}')
    # Получение данных от клиента
    data = connection.recv(1024)
    print(f'Получено: {data.decode()}')
    # Отправка ответа
    connection.sendall(b'Hello from server!')

client.py (Клиент)

import socket

# Создание сокета и подключение к серверу
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
    client_socket.connect(('127.0.0.1', 65432))
    # Отправка данных
    client_socket.sendall(b'Hello from client!')
    # Получение ответа
    data = client_socket.recv(1024)
print(f'Получен ответ: {data.decode()}')

Применение: онлайн-чаты, многопользовательские игры, стриминг, API реального времени.