мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
glossary:net:concepts:berkeley_sockets [2025/09/15 14:36] – удалено - внешнее изменение (Дата неизвестна) A User Not Logged inglossary:net:concepts:berkeley_sockets [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 1: Строка 1:
 +====== Berkeley sockets ======
  
 +Сокет-интерфейс Беркли (Berkeley Sockets) - это API для сетевого программирования, который был разработан в Университете Калифорнии в Беркли. Он позволяет приложениям обмениваться данными через сети, используя различные протоколы, такие как TCP и UDP. Вот основные концепции и функции, которые тебе нужно знать.
 +
 +**Сокет** - это абстракция, представляющая конечную точку связи. Сокеты бывают двух типов: потоковые (stream sockets) для TCP и дейтаграммные (datagram sockets) для UDP.
 +
 +Пример использования:
 +
 +1. **Создание сокета**: Для создания сокета используется функция ''socket()''. Она принимает три параметра: домен (например, ''AF_INET'' для IPv4), тип сокета (например, ''SOCK_STREAM'' для TCP) и протокол (обычно 0, что означает протокол по умолчанию для указанного типа сокета).
 +<code cpp>
 +int sockfd = socket(AF_INET, SOCK_STREAM, 0);
 +</code>
 +
 +2. **Привязка сокета**: Функция ''bind()'' связывает сокет с конкретным адресом и портом. Это необходимо для серверных приложений.
 +<code cpp>    
 +struct sockaddr_in serv_addr;
 +serv_addr.sin_family = AF_INET
 +serv_addr.sin_addr.s_addr = INADDR_ANY;
 +serv_addr.sin_port = htons(8080);
 +bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
 +</code>
 +
 +3. **Прослушивание и принятие соединений**: Серверные приложения используют функции ''listen()'' и ''accept()'' для ожидания и принятия входящих соединений.
 +<code cpp>    
 +listen(sockfd, 5);
 +int newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
 +</code>
 +
 +4. **Соединение с сервером**: Клиентские приложения используют функцию ''connect()'' для установления соединения с сервером.
 +<code cpp>
 +connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
 +</code>
 +
 +5. **Отправка и получение данных**: Для отправки и получения данных используются функции ''send()'' и ''recv()'' для потоковых сокетов, ''sendto()'' и ''recvfrom()'' для дейтаграммных сокетов.
 +<code cpp>
 +send(sockfd, "Hello, World!", 13, 0);
 +recv(sockfd, buffer, 256, 0);
 +</code>
 +
 +6. **Закрытие сокета**: После завершения работы с сокетом его необходимо закрыть с помощью функции ''close()''.
 +<code cpp>
 +close(sockfd);
 +</code>