From 5dedfb91463f8f51866ebcdb05481429d06b41c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=AD=99=E6=98=A5=E9=98=B3?= Date: Mon, 11 Aug 2025 14:34:34 +0800 Subject: [PATCH] =?utf8?q?=E5=8F=AF=E4=BB=A5=E5=BC=80=E5=A7=8B=E8=B0=83?= =?utf8?q?=E8=AF=95=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../peripheral/slip/cat1Service/cat1_ws.cpp | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp index f19097f2f..f1130d953 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp +++ b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp @@ -479,17 +479,17 @@ int send_handshake(WebSocketClient *client,const char *headers,char *response,in ret = -1; } - // retlen = tcp_recv_data_directly(client->tcp_handle, (uint8_t *)response, response_len); + int retlen = tcp_recv_data_directly(client->tcp_handle, (uint8_t *)response, response_len); - // if(retlen<0) - // { - // printf("tcp_recv_data_directly failed"); - // ret = -1; - // } - // else - // { - // ret = retlen; - // } + if(retlen<0) + { + printf("tcp_recv_data_directly failed"); + ret = -1; + } + else + { + ret = retlen; + } free(request); printf("send_handshake3 %d",ret); @@ -567,7 +567,33 @@ int send_websocket_message(WebSocketClient *client, uint8_t *message, size_t mes void _tcp_on_connect_cb(tcp_handle_t handle, bool success) { - printf("tcp_on_connect_cb %d %d\r\n",handle,success); + printf("tcp_on_connect_cb %p %d\r\n", handle, success); + + if (success) { + // 连接成功,查找对应的WebSocket客户端 + extern WebSocketClient * get_ws_client_by_handle(void* handle); + WebSocketClient * client = get_ws_client_by_handle(handle); + if (client != NULL) { + printf("连接成功,开始WebSocket握手\r\n"); + + // 发送WebSocket握手请求 + char *buffer = (char *)aic_zalloc(BUFFER_SIZE); + if (buffer != NULL) { + int bytes_received = send_handshake(client, "", buffer, BUFFER_SIZE); + if (bytes_received < 0) { + printf("WebSocket握手失败\r\n"); + tcp_manager_close(client->tcp_handle); + } else { + printf("WebSocket握手发送成功\r\n"); + } + free(buffer); + } + } else { + printf("未找到对应的WebSocket客户端\r\n"); + } + } else { + printf("TCP连接失败\r\n"); + } } void _tcp_on_disconnect_cb(tcp_handle_t handle) { @@ -595,13 +621,10 @@ void _tcp_on_data_received_cb(tcp_handle_t handle, uint8_t* data, uint16_t datal // 初始化 WebSocket 客户端 WebSocketClient *init_websocket_client(const char *url, const char *headers,uint8_t use_dns) { //printf("init_websocket_client 1\n"); - char *buffer = NULL; - WebSocketClient *client =NULL; + WebSocketClient *client = NULL; BK_URL parsed_url = {0}; - ssize_t bytes_received; int opt = 1; - - err_t ret=0; + err_t ret = 0; parsed_url = parse_url(url);//解析url @@ -638,37 +661,24 @@ WebSocketClient *init_websocket_client(const char *url, const char *headers,uint /* 初始化WebSocket组包解析器 */ ws_parser_init(&client->parser); - buffer=(char *)aic_zalloc(BUFFER_SIZE); - if (bytes_received = send_handshake(client,headers,buffer,BUFFER_SIZE) < 0) { //发送头 - printf("socket send_handshake client_ERROR"); - tcp_manager_close(client->tcp_handle); - goto client_ERROR; - } - - if (bytes_received > 0) { - buffer[bytes_received] = '\0'; - printf("Received handshake response:\n%s\n", buffer); - } + /* 握手将在连接成功回调中发送,这里不再立即发送 */ + printf("WebSocket客户端初始化完成,等待TCP连接建立\r\n"); - if(strstr(buffer,"HTTP/1.1 101") == NULL) - { + // if(strstr(buffer,"HTTP/1.1 101") == NULL) + // { - goto client_ERROR; - } - printf("init_websocket_client end 1"); - free(buffer); + // goto client_ERROR; + // } + // printf("init_websocket_client end 1"); + // free(buffer); free_url(parsed_url); printf("init_websocket_client end 2"); return client; client_ERROR: - if(buffer) { - free(buffer); - buffer=NULL; - } if(client){ free(client); client = NULL; -- 2.17.1