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

Berkeley sockets

Сокет-интерфейс Беркли (Berkeley Sockets) - это API для сетевого программирования, который был разработан в Университете Калифорнии в Беркли. Он позволяет приложениям обмениваться данными через сети, используя различные протоколы, такие как TCP и UDP. Вот основные концепции и функции, которые тебе нужно знать.

Сокет - это абстракция, представляющая конечную точку связи. Сокеты бывают двух типов: потоковые (stream sockets) для TCP и дейтаграммные (datagram sockets) для UDP.

Пример использования:

1. Создание сокета: Для создания сокета используется функция socket(). Она принимает три параметра: домен (например, AF_INET для IPv4), тип сокета (например, SOCK_STREAM для TCP) и протокол (обычно 0, что означает протокол по умолчанию для указанного типа сокета).

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

2. Привязка сокета: Функция bind() связывает сокет с конкретным адресом и портом. Это необходимо для серверных приложений.

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));

3. Прослушивание и принятие соединений: Серверные приложения используют функции listen() и accept() для ожидания и принятия входящих соединений.

listen(sockfd, 5);
int newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);

4. Соединение с сервером: Клиентские приложения используют функцию connect() для установления соединения с сервером.

connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

5. Отправка и получение данных: Для отправки и получения данных используются функции send() и recv() для потоковых сокетов, sendto() и recvfrom() для дейтаграммных сокетов.

send(sockfd, "Hello, World!", 13, 0);
recv(sockfd, buffer, 256, 0);

6. Закрытие сокета: После завершения работы с сокетом его необходимо закрыть с помощью функции close().

close(sockfd);