什么是TCP和JSON?TCP是面向連接的傳輸協(xié)議,提供可靠的數(shù)據(jù)傳輸,屬于網(wǎng)絡(luò)層協(xié)議。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和編寫,常用于前后端數(shù)據(jù)傳輸。
C語言中,可以通過socket函數(shù)創(chuàng)建TCP連接,實(shí)現(xiàn)數(shù)據(jù)傳輸。下面是一個(gè)簡(jiǎn)單的TCP客戶端連接代碼:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<arpa/inet.h>int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) { perror("socket error"); exit(EXIT_FAILURE); } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr))< 0) { perror("connect error"); exit(EXIT_FAILURE); } char buffer[1024] = {0}; char* message = "Hello TCP Server!"; send(sockfd, message, strlen(message), 0); printf("Message sent: %s\n", message); if(read(sockfd, buffer, 1024)< 0) { perror("read error"); exit(EXIT_FAILURE); } printf("Server reply: %s\n", buffer); close(sockfd); return 0; }
使用TCP發(fā)送和接收數(shù)據(jù)后,如果需要傳輸JSON格式的數(shù)據(jù),可以使用cJSON庫(kù)。該庫(kù)可以輕松地創(chuàng)建、解析JSON格式的數(shù)據(jù)。
#include<stdio.h>#include "cJSON.h" int main() { char* json_str = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; cJSON* root = cJSON_Parse(json_str); if(!root) { printf("Error before: %s\n", cJSON_GetErrorPtr()); } else { cJSON* name = cJSON_GetObjectItem(root, "name"); cJSON* age = cJSON_GetObjectItem(root, "age"); cJSON* city = cJSON_GetObjectItem(root, "city"); printf("Name: %s\n", name->valuestring); printf("Age: %d\n", age->valueint); printf("City: %s\n", city->valuestring); cJSON_Delete(root); } return 0; }
在以上代碼中,我們使用cJSON_Parse函數(shù)將JSON字符串轉(zhuǎn)換為cJSON對(duì)象,然后使用cJSON_GetObjectItem函數(shù)獲取JSON鍵值對(duì)的值。最后使用cJSON_Delete函數(shù)釋放對(duì)象內(nèi)存。