C语言使用cJSON库构建HTTP服务器接收数据
在使用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等,并根据需要进行相应的处理。
原文地址: https://www.cveoy.top/t/topic/qjED 著作权归作者所有。请勿转载和采集!