websocket和http例子提交
authorcheng <chengyf@zhihuishixun.com>
Wed, 10 Sep 2025 12:30:41 +0000 (20:30 +0800)
committercheng <chengyf@zhihuishixun.com>
Wed, 10 Sep 2025 12:30:41 +0000 (20:30 +0800)
code/sdk/zhihui/leiniao/http_testsample.c [new file with mode: 0644]
code/sdk/zhihui/leiniao/websocket_testsample.c [new file with mode: 0644]

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