sockaddr_in с тем же хостом и портом, что у сервера.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpSoCln 676 of 696 menu
◀ ▶

Клиент сокета в C++

Клиентская сторона открывает соединение после успешного connect к уже слушающему серверу.

Адрес задают в sockaddr_in с тем же хостом и портом, что у сервера. Текст передают вызовом send с длиной буфера в байтах; перевод строки \n включают в отправляемую строку, если согласован протокол построчного обмена. После работы сокет закрывают через close.

Проверим код возврата у socket и connect, затем отправим строку на 127.0.0.1 и порт 18080:

#include <arpa/inet.h> #include <cstring> #include <cstdlib> #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> int main() { int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) { return 1; } sockaddr_in addr{}; addr.sin_family = AF_INET; addr.sin_port = htons(18080); if (inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr) != 1) { close(fd); return 1; } if (connect(fd, reinterpret_cast<sockaddr*>(&addr), sizeof(addr)) == -1) { close(fd); return 1; } const char* line = "client line\n"; if (send(fd, line, std::strlen(line), 0) == -1) { close(fd); return 1; } close(fd); return 0; }

Для проверки на той же машине заранее запускают сервер, который слушает 127.0.0.1:18080 и ждет accept. Отправим другую строку и выведем на сервере прочитанный текст в консоль - это делает программа сервера, а клиент лишь пишет в сокет:

#include <arpa/inet.h> #include <cstring> #include <cstdlib> #include <netinet/in.h> #include <sys/socket.h> #include <unistd.h> int main() { int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) { return 1; } sockaddr_in addr{}; addr.sin_family = AF_INET; addr.sin_port = htons(18080); if (inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr) != 1) { close(fd); return 1; } if (connect(fd, reinterpret_cast<sockaddr*>(&addr), sizeof(addr)) == -1) { close(fd); return 1; } const char* line = "note from client\n"; if (send(fd, line, std::strlen(line), 0) == -1) { close(fd); return 1; } close(fd); return 0; }

В одном запуске клиент отправляет строку "ping\n" на 127.0.0.1 и порт 18080; сервер печатает ее с префиксом "got: " в консоли.

Строка "alpha\n" уходит с клиента на 127.0.0.1; на стороне сервера в консоли должно появиться "alpha" без изменений.

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