【问题标题】:Websocket Client in C++ [closed]C ++中的Websocket客户端[关闭]
【发布时间】:2012-03-20 16:35:44
【问题描述】:

我需要使用 c++ 实现一个 websocket 客户端。我已经使用 ruby​​ 创建了一个基本的 websocket 服务器。但现在我想使用 c/c++ 测试连接。是否有任何易于使用的库可用于在 c/c++ 中实现 websockets?

提前致谢。

【问题讨论】:

  • 妈的,我讨厌别人写C/C++,下定决心,你是用C还是C++我> ?有不相同的语言。
  • 我同意你的看法.. 但客户在 c 或 c++ 中询问演示。对此感到抱歉。 :-)
  • C/C++ 是一个明智的要求,如果一个人是用 C++ 编写的,因为您可以直接使用 C++ 中的 C API。

标签: c++ c websocket


【解决方案1】:

Websocket++ 应该为你做这件事。 https://github.com/zaphoyd/websocketpp

虽然知道服务器/客户端实现什么版本的 Websocket 很重要。

【讨论】:

  • Websocket++ 好像没有被积极维护。
【解决方案2】:

这里有一个很棒的库,Beast.WebSocket,它大量构建在 Boost.Asio 之上: http://vinniefalco.github.io/

这是一个与 websocket 对话的示例程序:

#include <beast/websocket.hpp>
#include <beast/buffers_debug.hpp>
#include <boost/asio.hpp>
#include <iostream>
#include <string>

int main()
{
    // Normal boost::asio setup
    std::string const host = "echo.websocket.org";
    boost::asio::io_service ios;
    boost::asio::ip::tcp::resolver r(ios);
    boost::asio::ip::tcp::socket sock(ios);
    boost::asio::connect(sock,
        r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"}));

    using namespace beast::websocket;

    // WebSocket connect and send message using beast
    stream<boost::asio::ip::tcp::socket&> ws(sock);
    ws.handshake(host, "/");
    ws.write(boost::asio::buffer("Hello, world!"));

    // Receive WebSocket message, print and close using beast
    beast::streambuf sb;
    opcode op;
    ws.read(op, sb);
    ws.close(close_code::normal);
    std::cout <<
        beast::debug::buffers_to_string(sb.data()) << "\n";
}

【讨论】:

  • 我有 Boost 版本:1.53.0,我收到致命错误:boost/beast/websocket.hpp:没有这样的文件或目录
  • 您需要 Boost 1.58.0 或更高版本,并且您必须将 beast/include 目录添加到您的包含路径中。
  • 我下载了最新的 boost 并在其中找不到 beast,无论如何我下载了 boost 和 beast 并尝试编译我的代码并遇到了很多错误,所以现在使用 easywsclient 进行测试,但明天会尝试这个库。 idk 出了什么问题,它说一些 .hpp 文件丢失了,明天会发布完整的错误,应该一步一步来,关于如何运行 WebSocket 客户端。谢谢
  • [root@cpptests]# g++ websocket1.cpp -o websocket1boost -I /usr/src/beast/include -l boost_system 在 /usr/src/beast/include/boost/beast 包含的文件中.hpp:13:0,来自 websocket1.cpp:1:/usr/src/beast/include/boost/beast/config.hpp:15:40:致命错误:boost/core/ignore_unused.hpp:没有这样的文件或目录#include
【解决方案3】:

有 boost::asio 和 Poco.Net 可能还有其他一些,但是 C-API berkeley 套接字并不难,所以如果你不想使用这些库,可以看看它们。

编辑:对不起,我可能把“websockets”弄错了。你看过这里吗? http://en.wikipedia.org/wiki/Comparison_of_WebSocket_implementations (取自Simple C++ WebSocket Client (draft 08+ compatible)?)

【讨论】:

  • 目前正在调查。我发现 websocket++ 对我的实现很有用。我希望它会奏效。谢谢:-)
  • +1 与 websocket++ 一起使用:它非常符合规范(最终 RFC6455)和高性能。和基于 ASIO。
  • 请注意,截至 2013 年 3 月 21 日,维基百科链接并未列出任何基于 C 或 C++ 的浏览器外部客户端库。例如,提到的“websocket++”库不在维基百科列表中。
  • @JonWatte Wikipedia 列表最近被修剪为仅列出浏览器和主要 Web 框架,因此不再列出许多仅 Websocket。一般来说,对于查找具有特定功能或要求的库,该列表不再全面或有用。
  • 看起来维基百科已经恢复了库列表。它再次列出了 websocket++ 和其他。
【解决方案4】:

也许它仍然有用。

有一个很好的用 C 开发的 websocket 库。 有几个示例说明如何创建和处理 websocket。

http://libwebsockets.org/trac/libwebsockets(更多详情)或 https://github.com/warmcat/libwebsockets

【讨论】:

    【解决方案5】:

    经过大量搜索,我发现了这个位于 POCO 之上的方便项目。我会试一试,然后用我的经验回帖。

    https://github.com/hannon235/socket.io-poco/blob/master/examples/TestClient/main.cpp

    更新:

    尝试集成此库的时间过长。目前还没有完全出炉。在生产环境中使用之前需要做更多的工作。

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2014-07-11
      • 2021-03-25
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多