【发布时间】:2015-05-19 15:32:34
【问题描述】:
我正在尝试使用 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 & ws 应用程序,我已经使用 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 示例/文档,但无法获得有关如何解决此问题的任何信息。任何帮助都将不胜感激,并防止我把头穿过我的显示器。
【问题讨论】:
-
什么端口?一些低数量的端口是安全的。
-
我尝试了各种端口:80、8080、9000、3333 等。正如我所提到的,使用 localhost 我有一个正在运行的服务器,我可以通过浏览器连接到该服务器- 基于 websocket 客户端,所以理论上端口和地址应该可以工作。
-
我觉得我写了这个问题,我在同一条船上。我建立了一个节点 ws 服务器,并成功地使用了 chrome 扩展和 websocket.org 的 echo 表单。我在调试中运行 libwebsockets,但它只是发布“连接在服务器回复之前关闭”/LWS_CALLBACK_CLIENT_CONNECTION_ERROR。我想是时候启动wireshark了。
-
我应该补充一点,节点ws服务器永远不会收到连接尝试,即永远不会到达[wsserver.on('connection'...]
标签: c++ c libwebsockets