在使用cJSON建立HTTP服务器时,可以使用socket编程来接收刚才发送的数据。以下是一个简单的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#include "cJSON.h"

#define BUFFER_SIZE 1024
#define PORT 8080

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[BUFFER_SIZE] = {0};

    // 创建socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    // 绑定socket到指定的端口
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(server_fd, 3) < 0) {
        perror("listen failed");
        exit(EXIT_FAILURE);
    }

    // 接收连接并处理请求
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }

    // 读取请求数据
    read(new_socket, buffer, BUFFER_SIZE);
    printf("Received data: %s\n", buffer);

    // 解析JSON数据
    cJSON *json = cJSON_Parse(buffer);
    if (json == NULL) {
        printf("Failed to parse JSON data\n");
        exit(EXIT_FAILURE);
    }

    // 获取JSON数据的字段值
    cJSON *name = cJSON_GetObjectItemCaseSensitive(json, 'name');
    if (cJSON_IsString(name) && (name->valuestring != NULL)) {
        printf("Name: %s\n", name->valuestring);
    }

    // 释放JSON对象
    cJSON_Delete(json);

    close(new_socket);
    close(server_fd);

    return 0;
}

在上述示例中,首先创建了一个socket并绑定到指定的端口。然后,通过accept()函数接受了一个连接,并读取请求数据到buffer中。接下来,使用cJSON_Parse()函数解析JSON数据,并通过cJSON_GetObjectItemCaseSensitive()函数获取JSON数据的字段值。最后,释放了JSON对象,并关闭了socket。

请注意,上述示例仅展示了如何接收数据并解析JSON,实际应用中可能还需要处理其他HTTP请求,如GET、POST等,并根据需要进行相应的处理。

C语言使用cJSON库构建HTTP服务器接收数据

原文地址: https://www.cveoy.top/t/topic/qjED 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录