我试图使用libwebsockets创建一个C ++ websocket客户端,但由于它超时,我无法建立连接。我已经删除了测试内容,以及我用来建立连接的内容:
协议
static int defaultCallback(
struct libwebsocket_context* context,
struct libwebsocket* wsi,
enum libwebsocket_callback_reasons reason,
void* user,
void* in,
size_t len)
{
return 0;
}
static struct libwebsocket_protocols protocols[] = {
{ "default", defaultCallback, 0 },
{ NULL, NULL, 0 }
};
创建背景
struct lws_context_creation_info info;
memset(&info, 0, sizeof(info));
info.port = CONTEXT_PORT_NO_LISTEN;
#ifndef LWS_NO_EXTENSIONS
info.extensions = libwebsocket_get_internal_extensions();
#endif
info.gid = -1;
info.uid = -1;
info.protocols = protocols;
_context = libwebsocket_create_context(&info);
创建客户
注意:地址" ws:// localhost"我也试过" ws://echo.websocket.org"。 localhost服务器是Node&我用Chrome测试过的应用程序并且运行良好。
_websocket = libwebsocket_client_connect(_context, // context
_address.c_str(), // address
_port, // port
0, // use ssl?
"/", // path
_address.c_str(), // host
NULL, // origin
NULL, // protocol
-1); // version
服务上下文
while(1) {
libwebsocket_service(_context, 50);
}
输出 当我运行上面这是我通过libwebsockets记录回调的输出:
NOTICE: Initial logging level 1023
NOTICE: Library version: 1.4 3ae1bad
NOTICE: IPV6 not compiled in
NOTICE: libev support not compiled in
INFO: LWS_MAX_HEADER_LEN: 1024
INFO: LWS_MAX_PROTOCOLS: 5
INFO: SPEC_LATEST_SUPPORTED: 13
INFO: AWAITING_TIMEOUT: 5
INFO: SYSTEM_RANDOM_FILEPATH: '/dev/urandom'
INFO: LWS_MAX_ZLIB_CONN_BUFFER: 65536
NOTICE: static allocation: 4536 + (16 x 10240 fds) = 168376 bytes
INFO: LWS_MAX_EXTENSIONS_ACTIVE: 3
NOTICE: canonical_hostname = an-iMac
NOTICE: per-conn mem: 248 + 2140 headers + protocol rx buf
PARSER: Protocol: default
CLIENT: libwebsocket_client_connect: direct conn
CLIENT: libwebsocket_client_connect_2
CLIENT: libwebsocket_client_connect_2: address ws://localhost
INFO: insert_wsi_socket_into_fds: wsi=0x7ff808514c70, sock=8, fds pos=1
CLIENT: nonblocking connect retry
INFO: TIMEDOUT WAITING on 2
DEBUG: close: just_kill_connection
INFO: remove_wsi_socket_from_fds: wsi=0x7ff808514c70, sock=8, fds pos=1
DEBUG: Connection closed before server reply
我已经查看了所有libwebsockets示例/文档,我可以获取并且无法获得有关如何解决此问题的任何信息。任何帮助都将非常感激,并阻止我通过我的显示器。
答案 0 :(得分:0)
尝试不使用" ws://"的地址。只是简单的" localhost",或" 127.0.0.1"。
答案 1 :(得分:0)
请注意端口设置,如果使用端口协议,则无法单独指定端口。端口8090将在这里覆盖443,不要这样做:
# WRONG
./lws_test_client wss://192.168.202.120 --port=8090
INSTEAD,将端口指定为url:
的一部分./lws_test_client wss://192.168.202.120:8090
详细...
我很难确定来自libwebsockets客户端的初始握手尝试发生了什么。观察浏览器(通过chrome扩展或websockets.org的echo服务)和节点ws服务器之间的健康会话,我得到了大量的握手数据包:
从libwebsockets客户端,我看不到任何从客户端发送的数据包。
以root身份运行并没有帮助。我可以telnet到服务器,至少看到一点流量。测试客户端出了问题。
我正在使用主分支中的最新代码,也许这是问题的一部分,我接下来会切换回旧版本。
更新:此处问题已解决。我在他的邮件列表上得到了libwebsockets作者Andy本人的帮助。他在我的命令行中更正了我对客户端端口的规范。一旦我正确指定了端口,我就有了一个连接客户端。这是对这个Q& A的另一个答案的更深层次的解释,实际上说的是同样的事情。我希望这和你一样。
# DO NOT USE: ./lws_test_client wss://192.168.202.120 --port=8090
# "wss://" will override the specific port provided!
# INSTEAD, specify it as part of the url.
./lws_test_client wss://192.168.202.120:8090