如何解決C語言接收不到JSON數據包的問題?這個問題可能由多種原因引起。下面我們來討論這個問題的一種解決方案。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #define MAX_LEN 1024 int main() { // 定義服務器地址 struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); serv_addr.sin_port = htons(8080); // 創建套接字 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf("Failed to create socket.\n"); exit(1); } // 連接服務器 if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) { printf("Failed to connect to server.\n"); exit(1); } // 發送請求 char msg[MAX_LEN]; memset(msg, 0, MAX_LEN); strcpy(msg, "GET / HTTP/1.1\r\n"); strcat(msg, "Host: 127.0.0.1:8080\r\n"); strcat(msg, "Content-Type: application/json\r\n"); strcat(msg, "Content-Length: 21\r\n"); strcat(msg, "\r\n"); strcat(msg, "{\"name\":\"Jack\"}"); write(sockfd, msg, strlen(msg)); // 接收響應 char buf[MAX_LEN]; memset(buf, 0, MAX_LEN); if (read(sockfd, buf, MAX_LEN) == -1) { printf("Failed to receive response.\n"); exit(1); } // 打印結果 printf("%s", buf); // 關閉套接字 close(sockfd); return 0; }
在發送請求部分,我們設置了Content-Type為application/json,Content-Length為21。這樣可以告訴服務器我們要發送一個JSON數據包。在接收響應部分,我們使用read函數來接收服務器的響應。需要注意的是,JSON數據包可能比較大,所以我們需要多次調用read函數來接收完整的數據包。
通過以上設置,我們可以成功接收服務器發送的JSON數據包。如果仍然存在問題,請檢查網絡連接和服務器設置。