在C語言中,開發HTTP服務器是一項非常常見的任務。在HTTP服務器開發中,經常需要向客戶端返回JSON數據,具體實現方法如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define PORT 8080 int main(int argc, char const *argv[]) { int fd, status; struct sockaddr_in addr; char *json_data = "{ \"name\":\"guojinyi\", \"age\":28 }"; if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket Error"); exit(EXIT_FAILURE); } memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(PORT); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { perror("Bind Error"); exit(EXIT_FAILURE); } if (listen(fd, 10) == -1) { perror("Listen Error"); exit(EXIT_FAILURE); } while (1) { int client_fd; struct sockaddr_in client_addr; int addrlen = sizeof(client_addr); client_fd = accept(fd, (struct sockaddr *)&client_addr, (socklen_t*)&addrlen); if (client_fd == -1) { perror("Accept Error"); exit(EXIT_FAILURE); } char *http_response = "HTTP/1.1 200 OK\r\nContent-Type: application/json;charset=utf-8\r\n\r\n"; send(client_fd, http_response, strlen(http_response), 0); char *json_string = malloc(strlen(json_data) + 1); memcpy(json_string, json_data, strlen(json_data) + 1); send(client_fd, json_string, strlen(json_string), 0); close(client_fd); } close(fd); return 0; }
以上代碼實現了一個簡單的HTTP服務器,向客戶端返回JSON數據。具體過程是在客戶端連接之后,首先發送HTTP響應頭信息,然后再發送JSON數據。實際應用中,JSON數據可以從數據庫、文件或其他來源中獲取。
需要注意的是,本代碼只是一個簡單的HTTP服務器實現,實際應用中還需要進行更加完善的錯誤處理、并發處理、性能優化等操作。同時,為了保證安全性,還需要進行許多防范措施,例如防范SQL注入、XSS攻擊等。
上一篇c# 解析 json
下一篇c# 查找json表達式