From c05cf76162fdaa8084088f4da4b8b21f87effdea Mon Sep 17 00:00:00 2001 From: cheng Date: Wed, 10 Sep 2025 20:30:41 +0800 Subject: [PATCH] =?utf8?q?websocket=E5=92=8Chttp=E4=BE=8B=E5=AD=90?= =?utf8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- code/sdk/zhihui/leiniao/http_testsample.c | 243 ++++++++++++++++++ .../sdk/zhihui/leiniao/websocket_testsample.c | 204 +++++++++++++++ 2 files changed, 447 insertions(+) create mode 100644 code/sdk/zhihui/leiniao/http_testsample.c create mode 100644 code/sdk/zhihui/leiniao/websocket_testsample.c diff --git a/code/sdk/zhihui/leiniao/http_testsample.c b/code/sdk/zhihui/leiniao/http_testsample.c new file mode 100644 index 000000000..89b8b3317 --- /dev/null +++ b/code/sdk/zhihui/leiniao/http_testsample.c @@ -0,0 +1,243 @@ +#include +#include "httpclient.h" + +/* @brief http request buffer */ +#define REQ_BUF_SIZE 2048 +static char req_buf[REQ_BUF_SIZE]; + +/* @brief http response buffer */ +#define RSP_BUF_SIZE 2048 +static char rsp_buf[RSP_BUF_SIZE] = {0}; + +/*http get请求*/ +static int http_gettest(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://www.baidu.com/"; + int ret = -1; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen = sizeof(rsp_buf); + + printf("\n http request %s\r\n", req_url); + + ret = HttpClientGetRequest(&client, req_url, &client_data); + if (ret >= 0 && client.responseCode == 200) { + printf("resopnsebuf data: %s \n", client_data.responseBuf); + printf("headerbuf received: %s \n", client_data.headerBuf); + printf("responsecode = %d \n", client.responseCode); + printf("http test_01 success!\n"); + ret = 0; + } else { + printf("responsecode = %d \n", client.responseCode); + printf("http test_01 fail!, ret=0x%x\r\n", ret); + } + return ret; +} + +/*http get请求:配置自定义请求头*/ +static int http_setheader(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://www.baidu.com/"; + char *customer_header = "Accept: */*\r\n"; + int ret = -1; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen = sizeof(rsp_buf); + + printf("\n http request %s\r\n", req_url); + + HttpClientSetCustomHeader(&client, customer_header); + ret = HttpClientGetRequest(&client, req_url, &client_data); + if (ret >= 0 && client.responseCode == 200) { + printf("data received: %s \r\n", client_data.responseBuf); + printf("headerbuf data received: %s \r\n", client_data.headerBuf); + printf("responsecode = %d \n", client.responseCode); + printf("http test success!\r\n"); + ret = 0; + } else { + printf("responsecode = %d \n", client.responseCode); + printf("http test fail!, ret=0x%x\r\n", ret); + } + return ret; +} + +/*http post请求*/ +static int http_posttest(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://httpbin.org/anything"; + int ret = -1; + + client_data.postBuf = "{ \"name\": \"xyz\", \"password\": \"111\" }"; + size_t length = strlen(client_data.postBuf); + client_data.postBufLen = length; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen= sizeof(rsp_buf); + + printf("\n http request: %s \r\n", req_url); + + ret = HttpClientPostRequest(&client, req_url, &client_data); + if (ret >= 0 && client.responseCode == 200) { + printf("data received: %s \r\n", client_data.responseBuf); + printf("headerbuf data received: %s \r\n", client_data.headerBuf); + printf("responsecode: %d \r\n", client.responseCode); + printf("http test success!\r\n"); + ret = 0; + } else { + printf("responsecode = %d \n", client.responseCode); + printf("http test failed! ret= 0x%x \r\n", ret); + } + return ret; +} + +/*http put请求*/ +static int http_puttest(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://httpbin.org/anything"; + int ret = -1; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen= sizeof(rsp_buf); + + printf("\n http request: %s \r\n", req_url); + + client_data.postBuf = "{ \"name\": \"www\", \"email\": \"111@qq.com\", \"age\": 30 }"; + size_t length = strlen(client_data.postBuf); + client_data.postBufLen = length; + + ret = HttpClientPutRequest(&client, req_url, &client_data); + if (ret >= 0 && client.responseCode == 200) { + printf("data received: %s \r\n", client_data.responseBuf); + printf("headerbuf data received: %s \r\n", client_data.headerBuf); + printf("responsecode: %d \r\n", client.responseCode); + printf("http test success!\r\n"); + ret = 0; + } else { + printf("responsecode = %d \n", client.responseCode); + printf("http test failed! ret= 0x%x \r\n", ret); + } + return ret; +} + +/*http delete请求*/ +static int http_deletetest(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://httpbin.org/anything"; + int ret = -1; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen = sizeof(rsp_buf); + + printf("\n http request: %s \r\n", req_url); + + ret = HttpClientDelete(&client, req_url, &client_data); + if (ret >= 0 && client.responseCode == 200) { + printf("data received: %s \r\n", client_data.responseBuf); + printf("headerbuf data received: %s \r\n", client_data.headerBuf); + printf("responsecode: %d \r\n", client.responseCode); + printf("http test success!\r\n"); + ret = 0; + } else { + printf("responsecode = %d \n", client.responseCode); + printf("http test failed! ret= 0x%x \r\n", ret); + } + return ret; +} + +/*http get请求下载图片*/ +static int http_download(void) +{ + HttpClient client = {0}; + HttpClientData client_data = {0}; + char *req_url = "http://cn.bing.com/rp/Q5BJPjebyYN5QiqznkcMQmLrF9U.svg"; + size_t total_written = 0, file_size = 0; + int ret = -1; + + memset(req_buf, 0, sizeof(req_buf)); + client_data.headerBuf = req_buf; + client_data.headerBufLen = sizeof(req_buf); + + memset(rsp_buf, 0, sizeof(rsp_buf)); + client_data.responseBuf = rsp_buf; + client_data.responseBufLen = sizeof(rsp_buf); + + printf("\n http request: %s \r\n", req_url); + + FILE *fd = fopen("/user/log/http_test.svg", "wb"); + if (fd == NULL) { + printf("fopen failed \r\n"); + printf("Error: %s \r\n", strerror(errno)); + return -1; + } + + ret = HttpClientConn(&client, req_url); + if (ret == 0) { + ret = HttpClientSend(&client, req_url, HTTP_GET, &client_data); + if (ret == 0) { + do { + ret = HttpClientRecvResponse(&client, &client_data); + printf("headerbuf : %s \n", client_data.headerBuf); + if (client_data.contentBlockLen > 0) { + printf("receive client_data.contentBlockLen= %d \r\n", client_data.contentBlockLen); + file_size = fwrite(client_data.responseBuf, 1, client_data.contentBlockLen, fd); + total_written += file_size; + } + } while (client_data.isMore); + if (client_data.responseContentLen == 0) { + printf("receive length = 0 \n"); + } + if (total_written == client_data.responseContentLen && client.responseCode == 200 && file_size > 0) { + ret = 0; + printf("responsecode = %d \n", client.responseCode); + printf("The image is downloaded successfully and the data is complete! \n"); + printf("http test success! \n"); + } else { + printf("responsecode = %d \n", client.responseCode); + printf("The image data is incomplete! \n"); + printf("http test failed! \n"); + } + } else { + printf("responsecode = %d \n", client.responseCode); + printf("receive failed ret= 0x%x \r\n", ret); + printf("http test failed! \n"); + } + } + fclose(fd); + HttpClientClose(&client); + return ret; +} \ No newline at end of file diff --git a/code/sdk/zhihui/leiniao/websocket_testsample.c b/code/sdk/zhihui/leiniao/websocket_testsample.c new file mode 100644 index 000000000..dfe1cc56b --- /dev/null +++ b/code/sdk/zhihui/leiniao/websocket_testsample.c @@ -0,0 +1,204 @@ +#include +#include +#include "net_websocket.h" + +int g_recedata_flag = 0; +int clientFd = -1; +const char *g_send_data = NULL; +size_t g_send_data_length = 0; +pthread_mutex_t g_send_data_mutex = PTHREAD_MUTEX_INITIALIZER; +int g_success_count = 0; +int g_failed_count = 0; + +// 回调函数 +static void OnOpen(int client) +{ + printf("OnOpen, client=%d\n", client); + const char *data = "hello"; + int ret = WebSocketClientSendText(client, data, strlen(data)); + if (ret != 0) { + printf("send fail, ret=%d\n", ret); + return; + } else { + printf("send data success!\n"); + g_send_data = data; + g_send_data_length = strlen(data); + } +} + +static void OnMessage(int client, const char *data, size_t length, bool isFinished) +{ + printf("client(%d) onMessage, length=%zu\n", client, length); + + for (int i = 0; i < length; i++) { + printf("%c", data[i]); + } + printf("\n"); + + pthread_mutex_lock(&g_send_data_mutex); + if (length == g_send_data_length && memcmp(data, g_send_data, length) == 0) { + printf("Data received successfully and matches the sent data.\n"); + g_recedata_flag = 1; + g_success_count++; + } else { + printf("Data received does not match the sent data.\n"); + g_failed_count++; + } + + if (g_recedata_flag == 1 && g_send_data != NULL) { + free(g_send_data); + g_send_data = NULL; + g_send_data_length = 0; + } + pthread_mutex_unlock(&g_send_data_mutex); +} + +static void OnError(int client, struct WebSocketErrorResult error) +{ + printf("OnError,errcode=%d, messg=%s\n", error.errorCode, error.errorMessage); +} + +static void OnClose(int client) +{ + printf("client=%d, OnClose callback\n", client); +} + +// 向服务器发送普通字符数据,长度5字节 +int ws_sentdata(void) +{ + int clientFd; + int ret; + + const char *url1 = "ws://60.204.230.165:80"; + clientFd = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + if (clientFd < 0) { + printf("client fd fail=%d\n", clientFd); + return -1; + } + + ret = WebSocketClientConnect(clientFd, url1, NULL); + if (ret != 0) { + printf("connect fail\n"); + WebSocketClientClose(clientFd); + return -1; + } + + while (g_recedata_flag == 0) { + sleep(1); + } + + ret = WebSocketClientClose(clientFd); + if (ret != 0) { + printf("close fail, ret=0x%x\n", ret); + } else { + printf("close success!"); + } + g_recedata_flag = 0; + return 0; +} + +// 创建多个客户端(最大为客户端数量为4个) +int ws_createclient(void) +{ + int clientFd_1, clientFd_2, clientFd_3, clientFd_4; + int ret1, ret2, ret3, ret4; + + const char *url = "wss://60.204.230.165:443"; + clientFd_1 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + clientFd_2 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + clientFd_3 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + clientFd_4 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + if (clientFd_1 < 0 || clientFd_2 < 0 || clientFd_3 < 0 || clientFd_4 < 0) { + printf("client fd fail clientFd_1=%d, clientFd_2=%d, clientFd_3=%d, clientFd_4=%d\n", clientFd_1, clientFd_2, clientFd_3, clientFd_4); + return -1; + } + + ret1 = WebSocketClientConnect(clientFd_1, url, NULL); + ret2 = WebSocketClientConnect(clientFd_2, url, NULL); + ret3 = WebSocketClientConnect(clientFd_3, url, NULL); + ret4 = WebSocketClientConnect(clientFd_4, url, NULL); + if (ret1 != 0 || ret2 != 0 || ret3 !=0 || ret4 != 0) { + printf("connect fail\n"); + WebSocketClientClose(clientFd_1); + WebSocketClientClose(clientFd_2); + WebSocketClientClose(clientFd_3); + WebSocketClientClose(clientFd_4); + return -1; + } + + while (g_recedata_flag == 0) { + sleep(1); + } + + ret1 = WebSocketClientClose(clientFd_1); + ret2 = WebSocketClientClose(clientFd_2); + ret3 = WebSocketClientClose(clientFd_3); + ret4 = WebSocketClientClose(clientFd_4); + if (ret1 != 0 || ret2 != 0 || ret3 != 0 || ret4 != 0) { + printf("close fail!, ret1=0x%x, ret2=0x%x, ret3=0x%x, ret4=0x%x\n", ret1, ret2, ret3, ret4); + } else { + printf("close success!"); + } + g_recedata_flag = 0; + return 0; +} + +// 连接服务器成功后发送字符数据,服务器接收到断连再次连接 +int ws_con_discon(void) +{ + int clientFd_1, clientFd_2; + int ret; + + const char *url1 = "ws://60.204.230.165:80"; + clientFd_1 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + if (clientFd_1 < 0) { + printf("client fd fail=%d\n", clientFd_1); + return -1; + } + + ret = WebSocketClientConnect(clientFd_1, url1, NULL); + if (ret != 0) { + printf("connect fail\n"); + WebSocketClientClose(clientFd_1); + return -1; + } + + while (g_recedata_flag == 0) { + sleep(1); + } + + ret = WebSocketClientClose(clientFd_1); + if (ret != 0) { + printf("close fail, ret=0x%x\n", ret); + } else { + printf("close success!"); + } + g_recedata_flag = 0; + + // 第二次连接发送数据 + clientFd_2 = WebSocketClientConstructor(OnOpen, OnMessage, OnError, OnClose); + if (clientFd_2 < 0) { + printf("client fd fail=%d\n", clientFd_2); + return -1; + } + + ret = WebSocketClientConnect(clientFd_2, url1, NULL); + if (ret != 0) { + printf("connect fail\n"); + WebSocketClientClose(clientFd_2); + return -1; + } + + while (g_recedata_flag == 0) { + sleep(1); + } + + ret = WebSocketClientClose(clientFd_2); + if (ret != 0) { + printf("close fail, ret=0x%x\n", ret); + } else { + printf("close success!"); + } + g_recedata_flag = 0; + return 0; +} \ No newline at end of file -- 2.17.1