мета-данные страницы
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);