Где найти пример UDP сервера на асинхронных сокетах? Не могу найти нормального примера асинхронного сервера UDP на С++ (или просто C ). Есть только варианты TCP.
Libev \ LibEvent \ Libuv не предлагать, нужно сделать на *poll. Хочу потом перевести на поддержку ipv6 кода.
Есть где то примеры, как реализовать сервер такой или что почитать?
P.S. ранее делал асинхронный TCP на Libev

21 Авг 2019 в 06:31
195 +1
0
Ответы
1

Для реализации асинхронного UDP сервера на сокетах в C++ с использованием функции poll(), вам может понадобиться использовать структуры данных и функции из библиотеки <sys/types.h>, <sys/socket.h>, <netinet/in.h>, <arpa/inet.h>, <unistd.h>, <poll.h>.

Пример кода реализации UDP сервера на асинхронных сокетах с использованием poll():

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
#include <poll.h>
int main() {
int sockfd, client_sockfd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
std::cerr << "Error creating socket\n";
return 1;
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(12345);
if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
std::cerr << "Error binding socket\n";
return 1;
}
struct pollfd fds[1];
fds[0].fd = sockfd;
fds[0].events = POLLIN;
while (true) {
if (poll(fds, 1, -1) < 0) {
std::cerr << "Error polling\n";
return 1;
}
if (fds[0].revents & POLLIN) {
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
client_len = sizeof(client_addr);
if (recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *) &client_addr, &client_len) < 0) {
std::cerr << "Error receiving data\n";
continue;
}
std::cout << "Received: " << buffer << std::endl;
}
}
close(sockfd);
return 0;
}

В этом примере мы создаем UDP сокет, привязываем его к адресу и порту, и используем функцию poll() для асинхронного ожидания данных от клиента. Когда данные приходят, мы их принимаем и выводим в консоль.

Надеюсь, этот пример будет полезен для вас. Вам также может быть полезно изучить дополнительную документацию по работе с сокетами в C/C++ для более глубокого понимания темы.

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир