ix::WebSocket с URL схемы ws. Метод setUrl задает адрес; start запускает фоновый поток и рукопожатие.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpWsCln 691 of 696 menu
◀ ▶

Клиент WebSocket в C++

Клиент WebSocket - объект ix::WebSocket с URL схемы ws.

Метод setUrl задает адрес; start запускает фоновый поток и рукопожатие. Событие открытия приходит в setOnMessageCallback с типом Open, после чего соединение готово к обмену строками.

Отправка текста - вызов send с английской фразой. Сервер в фоне принимает кадр; клиент может не обрабатывать ответ, если задача - только доставка:

#include <atomic> #include <ixwebsocket/IXWebSocket.h> #include <ixwebsocket/IXWebSocketServer.h> int main() { std::atomic<bool> link_open{false}; std::atomic<bool> frame_seen{false}; ix::WebSocketServer server(18082, "127.0.0.1"); server.setOnClientMessageCallback( [&](std::shared_ptr<ix::ConnectionState>, ix::WebSocket&, const ix::WebSocketMessagePtr& msg) { if (msg->type == ix::WebSocketMessageType::Message) { frame_seen.store(true); frame_seen.notify_all(); } }); auto bound = server.listen(); if (!bound.first) { std::cerr << bound.second << "\n"; return 1; } server.start(); ix::WebSocket client; client.setUrl("ws://127.0.0.1:18082"); client.setOnMessageCallback( [&](const ix::WebSocketMessagePtr& msg) { if (msg->type == ix::WebSocketMessageType::Open) { link_open.store(true); link_open.notify_all(); } }); client.start(); while (!link_open.load()) { link_open.wait(false); } client.send("ping"); while (!frame_seen.load()) { frame_seen.wait(false); } client.stop(); server.stop(); return 0; }

Адрес ws://127.0.0.1:18082 совпадает с портом сервера. Другой текст кладут в send без смены остального каркаса:

#include <atomic> #include <ixwebsocket/IXWebSocket.h> #include <ixwebsocket/IXWebSocketServer.h> int main() { std::atomic<bool> link_open{false}; std::atomic<bool> frame_seen{false}; ix::WebSocketServer server(18082, "127.0.0.1"); server.setOnClientMessageCallback( [&](std::shared_ptr<ix::ConnectionState>, ix::WebSocket&, const ix::WebSocketMessagePtr& msg) { if (msg->type == ix::WebSocketMessageType::Message) { frame_seen.store(true); frame_seen.notify_all(); } }); auto bound = server.listen(); if (!bound.first) { std::cerr << bound.second << "\n"; return 1; } server.start(); ix::WebSocket client; client.setUrl("ws://127.0.0.1:18082"); client.setOnMessageCallback( [&](const ix::WebSocketMessagePtr& msg) { if (msg->type == ix::WebSocketMessageType::Open) { link_open.store(true); link_open.notify_all(); } }); client.start(); while (!link_open.load()) { link_open.wait(false); } client.send("hello"); while (!frame_seen.load()) { frame_seen.wait(false); } client.stop(); server.stop(); return 0; }

Подключитесь к локальному серверу на 127.0.0.1 и передайте строку "time". Сервер должен принять один кадр.

Отправьте на 127.0.0.1 текст "job 3" после события открытия в колбэке клиента.

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