在C語(yǔ)言中使用TCP發(fā)送JSON數(shù)據(jù)格式是一種非常實(shí)用的技巧,這可以方便我們?cè)诰W(wǎng)絡(luò)通信中傳輸數(shù)據(jù),常用于服務(wù)器與客戶(hù)端之間的通訊。JSON是一種輕量級(jí)數(shù)據(jù)交換格式,通常以鍵值對(duì)的形式表示數(shù)據(jù),因其簡(jiǎn)潔易讀、輕便跨平臺(tái)而被廣泛應(yīng)用。
//示例代碼 #include#include #include #include #include #include #include #include #define MAXLINE 1024 typedef struct { int id; char name[20]; char gender; } Student; char * encode(Student s) { char * str = malloc(50); sprintf(str, "{\"id\":%d,\"name\":\"%s\",\"gender\":\"%c\"}", s.id, s.name, s.gender); return str; } int main() { int sockfd, n; struct sockaddr_in servaddr; char recvline[MAXLINE + 1]; Student s; sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(9999); inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); s.id = 1001; strcpy(s.name, "Tom"); s.gender = 'M'; char * str = encode(s); write(sockfd, str, strlen(str)); n = read(sockfd, recvline, MAXLINE); recvline[n] = 0; printf("%s\n", recvline); free(str); close(sockfd); return 0; }
上述示例代碼中,我們定義了一個(gè)Student結(jié)構(gòu)體,包含學(xué)號(hào)、姓名和性別等信息,并定義了一個(gè)encode函數(shù)將其轉(zhuǎn)為JSON格式的字符串。在主函數(shù)中,我們首先創(chuàng)建一個(gè)TCP套接字并連接到服務(wù)器,然后定義一個(gè)Student結(jié)構(gòu)體并調(diào)用encode函數(shù)對(duì)其進(jìn)行編碼。最后通過(guò)write函數(shù)將編碼后的字符串發(fā)送給服務(wù)器,接著讀取服務(wù)器返回的信息并打印輸出。最后關(guān)閉套接字并釋放編碼后的字符串。