Пример клиента Zaphoyd websocketpp и wss (TLS)

Мне нужны быстрые, безопасные и портативные websockts, поэтому я копался в Интернете, и я наткнулся на WebSocket ++ Zaphoyd Studios.

У меня есть нулевой опыт работы с С++ (хотя я опытный программист), но он, кажется, галочки для каждого окна, который мне нужен, и я быстро адаптировал примеры echo_server и telemetry_client на github и собрал доказательство концепции.

Установка моей стороны на пример сервера wss (echo_server_tls) Я быстро скомпилировал и использовал простой тестовый клиент, чтобы убедиться, что он работает.

К сожалению, там, где моя неопытность терпит неудачу, я наивно надеялся, что изменение URL-адреса на wss и включение заголовка клиента с поддержкой tls (asio_client.hpp not asio_no_tls_client.hpp) приведет меня в правильное направление!

Это не так, вместо этого он дает ошибку; -

[2014-05-29 01:17:58] [application] Get Connection Error: endpoint not secure

Итак... мой вопрос;

Есть ли у кого-нибудь пример "echo_client_tls", чтобы заставить меня двигаться в правильном направлении, я очень сомневаюсь, что я первый, кто это сделал (возможно, просто самый неопытный с С++, хотя).

Я уверен, что смогу взять его оттуда (я даже верну его обратно в git, поскольку он, вероятно, будет полезен для других нубов, таких как мое я).

P.S. Престижность авторам, если они когда-либо читали это, кажется очень полной реализацией!

1 ответ

Помимо включения заголовка клиента с поддержкой tls, клиенту необходимо предоставить обработчик для tls_init. Вы можете изменить один из существующих клиентских примеров для поддержки tls, добавив следующий обработчик.

_client.set_tls_init_handler([this](websocketpp::connection_hdl){
 return websocketpp::lib::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::tlsv1);
});
</boost::asio::ssl::context>

licensed under cc by-sa 3.0 with attribution.