C Socket是一種使用TCP/IP協(xié)議進(jìn)行網(wǎng)絡(luò)通信的編程方式,可以用于實(shí)現(xiàn)Server-Client的網(wǎng)絡(luò)通信模式,也可以用于實(shí)現(xiàn)云端與設(shè)備的通信。而JSON協(xié)議則是一種數(shù)據(jù)交換格式,常用于互聯(lián)網(wǎng)中應(yīng)用程序之間的數(shù)據(jù)傳輸。在C Socket編程中,我們可以使用JSON協(xié)議進(jìn)行數(shù)據(jù)的傳輸。下面我們將介紹如何使用C Socket和JSON協(xié)議進(jìn)行數(shù)據(jù)的傳輸。
// 導(dǎo)入所需頭文件 #include#include #include #include #include #include #include #include "cJSON.h" int main(int argc, char **argv) { int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); // 服務(wù)器端口號(hào) servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 服務(wù)器IP地址 connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); char sendline[1024], recvline[1024]; cJSON *json = cJSON_CreateObject(); // 創(chuàng)建JSON對(duì)象 cJSON_AddStringToObject(json, "name", "張三"); cJSON_AddNumberToObject(json, "age", 20); cJSON_AddStringToObject(json, "gender", "男"); sprintf(sendline, "%s", cJSON_Print(json)); // 將JSON對(duì)象轉(zhuǎn)化為字符串 send(sockfd, sendline, strlen(sendline), 0); memset(recvline, 0, sizeof(recvline)); recv(sockfd, recvline, sizeof(recvline), 0); cJSON *recv_json = cJSON_Parse(recvline); // 解析收到的JSON字符串 char *name = cJSON_GetObjectItem(recv_json, "name")->valuestring; int age = cJSON_GetObjectItem(recv_json, "age")->valueint; char *gender = cJSON_GetObjectItem(recv_json, "gender")->valuestring; printf("收到響應(yīng):name=%s, age=%d, gender=%s\n", name, age, gender); close(sockfd); cJSON_Delete(json); // 釋放JSON對(duì)象 cJSON_Delete(recv_json); return 0; }
上述代碼實(shí)現(xiàn)了一個(gè)C Socket客戶端,它向指定的服務(wù)器發(fā)送了一個(gè)JSON字符串,并從服務(wù)器返回了一條JSON響應(yīng)。實(shí)現(xiàn)這些功能的關(guān)鍵是使用了cJSON庫(kù)來(lái)創(chuàng)建和解析JSON對(duì)象,并使用send和recv函數(shù)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的傳輸。使用C Socket和JSON協(xié)議進(jìn)行數(shù)據(jù)傳輸可以實(shí)現(xiàn)快速高效的網(wǎng)絡(luò)通信,因此在實(shí)際應(yīng)用中非常常見(jiàn)。