C++中的Websocket客户端

19

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

谢谢提前。


15
讨厌有些人写_C/C++,到底是要用_C 还是 _C++_?它们并不是同一种语言。请明确你使用的是哪种语言。 - ApprenticeHacker
我同意你的观点,但客户要求使用C或C++编写演示。对此感到抱歉。 :-) - hbdev012
19
如果使用C++编写代码,请求使用C/C++是很合理的,因为你可以直接从C++中使用C API。 - uckelman
4个回答

10

这里有一个很棒的库,名为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: 没有那个文件或目录。 - user1642018
您需要Boost 1.58.0或更高版本,并且必须将beast/include目录添加到您的包含路径中。 - Vinnie Falco
1
我下载了最新的boost,但在其中找不到beast。无论如何,我已经下载了boost和beast,并尝试编译我的代码,但出现了许多错误。所以现在正在使用easywsclient进行测试,但明天会尝试这个库。我不知道出了什么问题,它说缺少一些.hpp文件,我明天会发布完整的错误信息。应该有逐步说明如何运行WebSocket客户端。谢谢。 - user1642018
1
[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。 致命错误:boost/core/ignore_unused.hpp:没有那个文件或目录 #include <boost/core/ignore_unused.hpp> - user1642018

9

5
Websocket++ 似乎没有得到积极维护。 - Konchog

4

2

目前正在研究此事。我发现websocket ++对我的实现很有用。我希望它能够工作。谢谢 :-) - hbdev012
+1 选择使用websocket++:它非常符合规范(最终 RFC6455)并且性能高,基于ASIO。 - oberstet
请注意,截至2013年3月21日,维基百科链接中没有列出任何基于C或C ++的浏览器外部客户端库。例如,提到的“websocket ++”库不在维基百科列表中。 - Jon Watte
1
@JonWatte 维基百科的列表最近被修剪,仅列出浏览器和主要的 Web 框架,因此很多只支持 WebSocket 的浏览器不再列出。总体而言,该列表已不再全面或有用,难以满足查找具有特定功能或要求的库的目的。 - zaphoyd
看起来维基百科已经恢复了库列表,它再次列出了websocket++等库。 - Paul Merrill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接