C語(yǔ)言是一門(mén)非常實(shí)用的編程語(yǔ)言,常常用于系統(tǒng)開(kāi)發(fā)、網(wǎng)絡(luò)編程等領(lǐng)域。在網(wǎng)絡(luò)編程中,使用異步接收J(rèn)SON數(shù)據(jù)是非常常見(jiàn)的操作。下面將介紹如何使用C語(yǔ)言實(shí)現(xiàn)異步接收J(rèn)SON數(shù)據(jù)。
//首先需要引入一些頭文件 #include#include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXLINE 4096 //下面是異步接收J(rèn)SON數(shù)據(jù)的實(shí)現(xiàn)代碼 static char buffer[MAXLINE]; //定義存放JSON數(shù)據(jù)的緩沖區(qū) static int pos; //定義緩沖區(qū)當(dāng)前位置 json_object * async_receive_json(int sockfd) { int fd_flags, ret; struct sockaddr_in servaddr; socklen_t len = sizeof(servaddr); fd_set rset; json_object * obj = NULL; struct timeval timeout; while (1) { FD_ZERO(&rset); FD_SET(sockfd, &rset); timeout.tv_sec = 5; timeout.tv_usec = 0; //使用select等待數(shù)據(jù) ret = select(sockfd + 1, &rset, NULL, NULL, &timeout); if (ret< 0) { if (errno == EINTR) continue; return NULL; } else if (ret == 0) { return NULL; } //接收J(rèn)SON數(shù)據(jù) memset(buffer + pos, 0, MAXLINE - pos); ret = recvfrom(sockfd, buffer + pos, MAXLINE - pos, 0, (struct sockaddr *)&servaddr, &len); if (ret<= 0) { continue; } pos += ret; //解析JSON數(shù)據(jù) obj = json_tokener_parse(buffer); if (obj) break; } //清空緩沖區(qū) memset(buffer, 0, MAXLINE); pos = 0; return obj; }
以上就是使用C語(yǔ)言實(shí)現(xiàn)異步接收J(rèn)SON數(shù)據(jù)的全部?jī)?nèi)容,大家可以根據(jù)自己的需求進(jìn)行修改和使用。希望對(duì)大家有所幫助。
下一篇vue傳參全套