在C語言的網(wǎng)絡(luò)編程中,Socket是使用最廣泛的套接字,它是一種通信機(jī)制,包括一組函數(shù)和數(shù)據(jù)結(jié)構(gòu),它們可以在應(yīng)用程序之間傳遞數(shù)據(jù)。下面我們來看一下如何使用C Socket定義傳送JSON協(xié)議。
首先,需要包含Socket庫和JSON庫的頭文件:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <jansson.h>
然后,創(chuàng)建一個Socket通信協(xié)議,指定協(xié)議類型為IPv4協(xié)議。如下:
int client_socket = 0; struct sockaddr_in server_addr; if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("Socket creation error\n"); return -1; } memset(&server_addr, '0', sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); if(inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0){ printf("Invalid address/ Address not supported\n"); return -1; } if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){ printf("Connection Failed\n"); return -1; }
接著,將JSON數(shù)據(jù)轉(zhuǎn)換為字符串,然后使用函數(shù)send將數(shù)據(jù)發(fā)送給服務(wù)器:
json_t *root; json_error_t error; root = json_pack("{s:s, s:i, s:f}", "name", "test", "age", 20, "score", 80.5); char *json_str = json_dumps(root, JSON_COMPACT); send(client_socket, json_str, strlen(json_str), 0);
最后,接收服務(wù)器返回的數(shù)據(jù)并將其轉(zhuǎn)換為JSON格式:
char buffer[1024] = {0}; int valread = read(client_socket, buffer, 1024); json_t *json_response = json_loads(buffer, 0, &error); const char *response_name = json_string_value(json_object_get(json_response, "name")); int response_age = json_integer_value(json_object_get(json_response, "age")); printf("Name: %s\nAge: %d\n", response_name, response_age);
如上,我們就使用C Socket定義傳送JSON協(xié)議的過程。值得注意的是,使用JSON作為協(xié)議的格式,能夠使得數(shù)據(jù)傳輸更加簡潔,且易于解析。在實(shí)際應(yīng)用開發(fā)中,也會經(jīng)常用到這種方式。