欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c tcp json

錢艷冰2年前9瀏覽0評論

C語言是一種非常常用的編程語言,應用范圍廣泛。其中TCP協議是網絡編程中常用的協議,而JSON則是一種輕量級的數據交換格式。在C語言中,我們可以使用TCP協議和JSON格式來進行網絡數據的傳輸和處理。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <json-c/json.h>
int main(int argc, char ** argv) {
//創建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
printf("Socket create failed!\n");
return 1;
}
//設置socket為非阻塞模式
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
//綁定IP和端口號
struct sockaddr_in srv_addr;
memset(&srv_addr, 0, sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(8000);
inet_pton(AF_INET, "127.0.0.1", &srv_addr.sin_addr);
if (bind(sockfd, (struct sockaddr *)&srv_addr, sizeof(srv_addr)) < 0) {
printf("Bind failed!\n");
close(sockfd);
return 1;
}
//監聽
if (listen(sockfd, 5) < 0) {
printf("Listen failed!\n");
close(sockfd);
return 1;
}
//等待連接
int connfd;
struct sockaddr_in cli_addr;
socklen_t cli_len = sizeof(cli_addr);
char buf[2048];
memset(buf, 0, sizeof(buf));
while (1) {
connfd = accept(sockfd, (struct sockaddr *)&cli_addr, &cli_len);
if (connfd < 0) {
if (errno == EWOULDBLOCK) {
sleep(1);
} else {
printf("Accept failed!\n");
close(sockfd);
return 1;
}
} else {
//讀取JSON數據
int n = recv(connfd, buf, sizeof(buf), 0);
if (n <= 0) {
printf("Recv failed!\n");
close(connfd);
continue;
}
struct json_object *jobj = json_tokener_parse(buf);
if (!jobj) {
printf("Invalid JSON format!\n");
close(connfd);
continue;
}
//解析JSON數據
char *name, *age, *city;
json_object_object_get_ex(jobj, "name", &name);
json_object_object_get_ex(jobj, "age", &age);
json_object_object_get_ex(jobj, "city", &city);
printf("Name: %s\n", json_object_get_string(name));
printf("Age: %s\n", json_object_get_string(age));
printf("City: %s\n", json_object_get_string(city));
//發送響應數據
char response[1024] = "OK";
send(connfd, response, sizeof(response), 0);
close(connfd);
json_object_put(jobj);
}
}
close(sockfd);
return 0;
}

在上面的代碼中,我們首先創建了一個非阻塞模式的socket,并將其綁定在本地的IP和端口號上。然后我們開始監聽,等待客戶端的連接。當有客戶端連接進來時,我們先使用recv函數來讀取客戶端發送的JSON數據,并使用json-c庫來解析JSON數據。接著我們可以對其進行處理,然后再發送響應數據給客戶端。