在C語言中,編寫一個TCP客戶端以與服務器通信是一項常見的任務。當與服務器進行交互時,JSON是一種靈活和強大的數據格式,可以用作數據交換的通用語言。
在C語言中,可以使用開源的cJSON庫來處理JSON數據。該庫可以輕松地解析JSON數據,并將其轉換為C語言中的結構體或其他數據類型。
下面是一個使用cJSON庫的示例C TCP客戶端,該客戶端可以發送JSON數據并處理來自服務器的JSON響應:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <cJSON.h> #define SERVER_IP "127.0.0.1" #define SERVER_PORT 8888 int main() { int sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr = {0}; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_port = htons(SERVER_PORT); connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)); cJSON *root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "name", cJSON_CreateString("張三")); cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(18)); char *json_str = cJSON_Print(root); send(sock, json_str, strlen(json_str), 0); char buffer[1024] = {0}; recv(sock, buffer, sizeof(buffer), 0); cJSON *response = cJSON_Parse(buffer); cJSON *result = cJSON_GetObjectItem(response, "result"); printf("服務器返回的結果為:%s\n", cJSON_GetStringValue(result)); cJSON_Delete(root); cJSON_Delete(response); free(json_str); close(sock); return 0; }
在上面的示例代碼中,我們建立了一個TCP連接,并使用cJSON庫創建了一個JSON對象,其中包含有一個名為“name”的字符串和一個名為“age”的數字。然后,我們將JSON對象轉換成字符串并發送給服務器。在接收到服務器的響應后,我們將字符串解析成一個JSON對象,并獲取名為“result”的值。
通過使用cJSON庫,我們可以輕松地在C語言中處理JSON數據,從而實現C TCP客戶端支持JSON的功能。