對于C語言的TCP客戶端,現在越來越多地需要支持JSON格式的數據傳輸。在此,我們可以使用一些JSON庫來方便地實現這一功能。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> #include <jansson.h> #define BUFLEN 1024 int main(int argc, char* argv[]) { int sockfd, connfd; char buffer[BUFLEN]; struct sockaddr_in serv_addr; struct hostent *server; sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd< 0) { printf("Error creating socket\n"); return 1; } server = gethostbyname(argv[1]); if (server == NULL) { printf("Error resolving host\n"); return 1; } bzero((char*) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(atoi(argv[2])); bcopy((char*) server->h_addr, (char*) &serv_addr.sin_addr.s_addr, server->h_length); if (connect(sockfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr))< 0) { printf("Error connecting to server\n"); return 1; } // build JSON object json_t *root; root = json_object(); json_object_set_new(root, "name", json_string("Alice")); json_object_set_new(root, "age", json_integer(25)); json_object_set_new(root, "email", json_string("alice@example.com")); const char *json_string = json_dumps(root, JSON_COMPACT); // send JSON string to server if (send(sockfd, json_string, strlen(json_string), 0)< 0) { printf("Error sending data to server\n"); return 1; } // receive response from server bzero(buffer, BUFLEN); int n = recv(sockfd, buffer, BUFLEN-1, 0); if (n< 0) { printf("Error receiving data from server\n"); return 1; } printf("%s\n", buffer); // cleanup json_decref(root); close(sockfd); return 0; }
上述代碼中,我們使用了jansson庫來構建JSON對象和將JSON對象轉化為字符串。我們首先創建了一個JSON對象,然后向其中添加了一些鍵值對,最終將JSON對象轉化為字符串。接著我們將這個字符串發送給服務器,并且等待服務器的響應。一旦收到響應,我們可以直接打印即可。
需要注意的是,這里我們使用了JSON_COMPACT選項將JSON字符串壓縮為一行,從而方便發送和接收。
上一篇mysql語句架構介紹
下一篇docker公司產品