sockaddr_in заполняют для 127.0.0.1 и порта 18081.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpUdSnd 682 of 696 menu
◀ ▶

Отправка UDP-пакета в C++

Отправка датаграммы кладет буфер байтов в сеть по адресу получателя.

Структуру sockaddr_in заполняют для 127.0.0.1 и порта 18081. Вызов sendto передает буфер в сеть. Если на порту никто не слушает, на localhost отправка все равно завершится без ошибки - прием в этом уроке не используем.

Создадим сокет SOCK_DGRAM, отправим слово ping и закроем дескриптор:

#include <arpa/inet.h> #include <cstring> #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> int main() { int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd == -1) { return 1; } sockaddr_in dest{}; dest.sin_family = AF_INET; dest.sin_port = htons(18081); if (inet_pton(AF_INET, "127.0.0.1", &dest.sin_addr) != 1) { close(fd); return 1; } const char msg[] = "ping"; if (sendto( fd, msg, std::strlen(msg), 0, reinterpret_cast<sockaddr*>(&dest), sizeof(dest) ) == -1) { close(fd); return 1; } close(fd); return 0; }

Другой текст кладут в тот же каркас - меняют только литерал перед отправкой. Выведем длину второго сообщения в байтах:

#include <arpa/inet.h> #include <cstring> #include <iostream> #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> int main() { int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd == -1) { return 1; } sockaddr_in dest{}; dest.sin_family = AF_INET; dest.sin_port = htons(18081); if (inet_pton(AF_INET, "127.0.0.1", &dest.sin_addr) != 1) { close(fd); return 1; } const char msg[] = "order 42"; std::size_t len = std::strlen(msg); if (sendto( fd, msg, len, 0, reinterpret_cast<sockaddr*>(&dest), sizeof(dest) ) == -1) { close(fd); return 1; } std::cout << len << "\n"; close(fd); return 0; }

Отправьте на 127.0.0.1 пакет с текстом "lab send". Приемник пусть выведет полученную строку в консоль.

Отправьте два пакета подряд с текстами "first" и "second" на один порт. Приемник напечатает обе строки по порядку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить