C JSON網(wǎng)絡(luò)編程,是指在C語(yǔ)言中,使用JSON格式進(jìn)行網(wǎng)絡(luò)編程。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫(xiě),廣泛應(yīng)用于前后端數(shù)據(jù)交互中。
在C語(yǔ)言中,由于沒(méi)有內(nèi)置的JSON解析庫(kù),我們需要使用第三方庫(kù)來(lái)進(jìn)行JSON解析和處理。常見(jiàn)的JSON庫(kù)有cJSON和Jansson。這里我們以cJSON為例,介紹如何進(jìn)行C JSON網(wǎng)絡(luò)編程。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <cjson/cJSON.h> #define BUFFER_SIZE 1024 int main(int argc, char **argv) { // 創(chuàng)建socket int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock< 0) { perror("socket"); exit(EXIT_FAILURE); } // 設(shè)置server的IP和端口 struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); // 連接server int ret = connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); if (ret< 0) { perror("connect"); exit(EXIT_FAILURE); } // 發(fā)送JSON數(shù)據(jù) cJSON *root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "id", 123); cJSON_AddStringToObject(root, "name", "John"); cJSON_AddStringToObject(root, "email", "john@example.com"); char *json_str = cJSON_Print(root); send(sock, json_str, strlen(json_str), 0); free(json_str); // 接收服務(wù)器返回的JSON數(shù)據(jù) char buffer[BUFFER_SIZE] = {0}; ret = recv(sock, buffer, BUFFER_SIZE, 0); if (ret< 0) { perror("recv"); exit(EXIT_FAILURE); } // 解析JSON數(shù)據(jù) cJSON *json = cJSON_Parse(buffer); int code = cJSON_GetObjectItem(json, "code")->valueint; char *msg = cJSON_GetObjectItem(json, "msg")->valuestring; cJSON_Delete(json); // 打印結(jié)果 printf("code: %d\nmsg: %s\n", code, msg); // 關(guān)閉socket close(sock); return 0; }
代碼中,我們先創(chuàng)建了一個(gè)socket并連接到服務(wù)器。然后使用cJSON庫(kù)創(chuàng)建JSON對(duì)象并發(fā)送到服務(wù)器,接收服務(wù)器返回的JSON對(duì)象并進(jìn)行解析。最后打印解析后的結(jié)果。
以上就是關(guān)于C JSON網(wǎng)絡(luò)編程的簡(jiǎn)單介紹,希望對(duì)大家有所幫助。