Поток усечен (Boost.Beast / Boost.Asio)

#c #boost #websocket #boost-asio #boost-beast

#c #повышение #websocket #boost-asio #boost-зверь

Вопрос:

Проблема:

Я пытаюсь написать веб-сокет на C с помощью Boost.Зверь. Websocket необходим для взаимодействия с binary.com API (примеры кода на разных языках — https://developers.binary.com/demos ). Но в строке «ws.read (buffer);» я получаю сообщение об ошибке «поток усечен».

Как воспроизвести:

  1. Программный код — Boost.Пример Beast SSL-клиента WebSocket, синхронный — https://github.com/boostorg/beast/blob/develop/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp .

  2. Корневые сертификаты.hpp — необходимы для программного кода, вы можете взять его отсюда — https://github.com/boostorg/beast/blob/develop/example/common/root_certificates.hpp .

  3. Не забудьте изменить верхнюю строку в программном коде, эта строка #include "example/common/root_certificates.hpp . Если вы разместили свой файл root_certificates.hpp с шага 2 в другое место, убедитесь, что ваш код может #включить его.

  4. В коде программы с шага 1 поместите этот код:

     argc = 4;

    argv[0] = "websocket-client-sync";

    argv[1] = "ws.binaryws.com";

    argv[2] = "443";

    argv[3] = "{"ticks":"R_100"}";

    auto target = "/websockets/v3?app_id=1089";
  
  1. В программном коде с шага 1 замените ws.handshake(host, "/"); на ws.handshake(host, target);

Что я пытаюсь получить в результате:

Вы можете увидеть, перейдя по этой ссылке — https://www.websocket.org/echo.html , в поле «Местоположение:» введите wss://ws.binaryws.com/websockets/v3?app_id=1089 и в поле «Сообщение:» введите {"ticks":"R_100"} . А затем нажмите «Подключиться» и «Отправить».