C 傳送 JSON 數(shù)據(jù)到服務(wù)器通常需要使用網(wǎng)絡(luò)協(xié)議和相關(guān)庫(kù)函數(shù)。在此先介紹下 Linux 系統(tǒng)下網(wǎng)絡(luò)編程需要用到的頭文件:
#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h>
其中 socket.h、netinet/in.h 和 arpa/inet.h 分別包含了 socket()、connect()、bind()、listen()、accept()、send() 和 recv() 以及網(wǎng)絡(luò)自定義數(shù)據(jù)類型的定義。fcntl.h 則定義了文件控制相關(guān)的宏。
接著介紹下 JSON 數(shù)據(jù)的發(fā)送方式。JSON 數(shù)據(jù)以字符串形式存在,在使用 send() 函數(shù)時(shí),需要將其進(jìn)行轉(zhuǎn)換。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> int main() { int client_socket; struct sockaddr_in server_address; char buffer[1024]; char *message = "{\"name\":\"Tom\",\"age\":20}"; client_socket = socket(AF_INET, SOCK_STREAM, 0); memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; server_address.sin_port = htons(3333); server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(client_socket, (struct sockaddr *)&server_address, sizeof(server_address)); // send json send(client_socket, message, strlen(message), 0); printf("JSON sent\n"); close(client_socket); return 0; }
在這個(gè)例子中,我們定義了一個(gè) JSON 字符串并當(dāng)作消息進(jìn)行發(fā)送。send() 函數(shù)的第三個(gè)參數(shù)傳遞的是消息的長(zhǎng)度。
總結(jié)來看,C 傳送 JSON 到服務(wù)器的流程大致是:
- 通過 socket() 函數(shù)創(chuàng)建客戶端套接字。
- 設(shè)置服務(wù)端地址和端口。
- 通過 connect() 函數(shù)連接服務(wù)器。
- 將 JSON 數(shù)據(jù)轉(zhuǎn)換成字符串,并使用 send() 向服務(wù)器傳遞。
- 關(guān)閉套接字。