現在的Web應用程序都越來越傾向于使用JSON(JavaScript Object Notation)作為數據交換的格式。C語言開發的應用程序通常使用Socket通信與其他應用程序進行交互。我們可以通過C語言的Socket接口從Web服務器接收JSON格式的數據,然后解析后對其進行處理。同樣,我們也可以使用C語言從Web服務器向其他應用程序發送JSON格式的數據。
//接收JSON數據 int sockfd; char buffer[MAXLINE]; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd< 0) { perror("socket error"); exit(-1); } memset(&servaddr, 0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); if (inet_pton(AF_INET, servip, &servaddr.sin_addr)<= 0) { perror("inet_pton error"); exit(-1); } if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))< 0) { perror("connect error"); exit(-1); } char request[MAXLINE] = "GET /data HTTP/1.1\r\nHost: localhost\r\n\r\n"; if (write(sockfd, request, strlen(request))< 0) { perror("write error"); exit(-1); } int n; while ((n = read(sockfd, buffer, MAXLINE)) >0) { // 處理JSON數據 }
上述代碼中,我們使用Socket接口從服務器獲取JSON數據。
//發送JSON數據 int sockfd; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd< 0) { perror("socket error"); exit(-1); } memset(&servaddr, 0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERV_PORT); if (inet_pton(AF_INET, servip, &servaddr.sin_addr)<= 0) { perror("inet_pton error"); exit(-1); } if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))< 0) { perror("connect error"); exit(-1); } char *json = "{\"name\":\"Tom\",\"age\":20}"; char request[MAXLINE]; sprintf(request, "POST /data HTTP/1.1\r\nHost: localhost\r\nContent-Type: application/json\r\nContent-Length: %d\r\n\r\n%s", strlen(json), json); if (write(sockfd, request, strlen(request))< 0) { perror("write error"); exit(-1); }
上述代碼中,我們使用Socket接口向服務器發送JSON數據。
上一篇c 接收json數據
下一篇vue中的prod