C語言作為一種經典的編程語言,被廣泛用于系統級編程、網絡編程、嵌入式開發等領域。而TCP/IP協議作為一種基于網絡的通信方式,在實際應用中也得到了廣泛應用。 在網絡編程中,JSON通訊已經成為一種非常流行的通訊方式,因為它不僅能簡化數據傳輸,而且還能提高數據的可讀性和處理效率。
在C語言中,我們可以使用第三方庫cJSON來進行JSON數據的解析和生成。下面給出一個簡單的C TCP中實現JSON數據通訊的示例:
int sockfd, newsockfd, portno, clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; cJSON *root; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd< 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = 5001; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr))< 0) error("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd< 0) error("ERROR on accept"); bzero(buffer,256); n = read(newsockfd,buffer,255); if (n< 0) error("ERROR reading from socket"); root = cJSON_Parse(buffer); if (!root) error("Error before: [%s]\n",cJSON_GetErrorPtr()); printf("Received JSON data: %s\n", cJSON_Print(root)); char* response_str = "{\"message\": \"Hello client\"}"; cJSON* response = cJSON_Parse(response_str); if (!response) error("Error before: [%s]\n",cJSON_GetErrorPtr()); char *response_buffer = cJSON_Print(response); n = write(newsockfd,response_buffer,strlen(response_buffer)); if (n< 0) error("ERROR writing to socket"); close(newsockfd); close(sockfd);
在這個示例中,我們首先創建了一個TCP套接字,并bind到了指定的端口上,然后調用listen()函數進行監聽。在客戶端連接成功后,我們通過read()函數從客戶端讀取JSON數據,并使用cJSON_Parse()函數解析JSON字符串,最后使用cJSON_Print()函數將解析后的JSON值進行輸出。接下來,我們構造了一個JSON響應字符串,并使用cJSON_Parse()函數解析它,最后使用write()函數將響應數據發送給客戶端。
在實際開發中,我們可以根據需要增加更多的JSON數據處理相關的代碼,以實現更復雜的功能。
上一篇python 時間碼
下一篇vue cs