2

Aclient.connect(web::uri)是必需的,但在查看后web::uri不会接受字符串。api似乎说它可以接受一个字符串,但它不会,我不知道为什么。

#include <iostream>
#include <stdio.h>
#include <cpprest/ws_client.h>

using namespace std;
using namespace web;
using namespace web::websockets::client;

int main(int argc, char **args) {

    uri link = uri("ws://echo.websocket.org"); //PROBLEM LINE
    websocket_client client;    
    client.connect(link).wait(); 

    websocket_outgoing_message out_msg;
    out_msg.set_utf8_message("test");
    client.send(out_msg).wait();

    client.receive().then([](websocket_incoming_message in_msg) {
        return in_msg.extract_string();
    }).then([](string body) {
        cout << body << endl;
    }).wait();

    client.close().wait();

    return 0;
}
4

1 回答 1

4

快速浏览一下显示的源代码uri有一个带有字符串参数的构造函数,但它不是一个简单的 C 类型字符串:

_ASYNCRTIMP uri(const utility::char_t *uri_string);

如果您在 windows 下构建它,您可能会发现它utility::char_t实际上是wchar_t,因此您可以在您的 URI 字符串前面加上一个 L 以将其标记为宽字符 unicode,如下所示:

uri link = uri(L"ws://echo.websocket.org");

我相信库提供了一个方便的跨平台字符串宏,U(). 看看常见问题解答。我认为它有点像这样:

uri link = uri(U("ws://echo.websocket.org"));
于 2017-05-22T11:53:39.700 回答