我想創建一個使用libwebsockets的C++ websocket客戶端,但我無法建立連接,因爲它超時。我已經剝離下來,用於測試和這裏是我用來建立連接的:如何防止libwebsockets客戶端超時
協議
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」。本地主機服務器是一個節點& 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示例/文檔,我可以得到我的手和c沒有關於如何解決這個問題的任何信息。任何幫助將不勝感激,並防止我把我的頭穿過我的顯示器。
什麼端口?一些低數量的端口是安全的。 –
我已經嘗試了各種端口:80,8080,9000,3333等。正如我所提到的,與本地主機我有一個服務器運行,我可以連接到基於瀏覽器的websocket客戶端,所以理論上港口和地址應該起作用。 – Huhwha
我覺得我寫了這個問題,我在同一條船上。我站在一個ws服務器的節點上,並使用chrome擴展名和websocket.org的echo形式成功打開它。我在調試中運行libwebsockets,但它只是發佈「連接在服務器應答之前關閉」/ LWS_CALLBACK_CLIENT_CONNECTION_ERROR。我想是時候啓動wireshark了。 – moodboom