[英]Read socket buffer not reading
這可能是一個簡單的問題,但是我試圖使用套接字API來讀取服務器響應,以適應來自Geeks for Geeks [site] 1的代碼,當我嘗試讀取數據時,它在valread = read(server_fd, buffer, 2048);
永遠被阻塞valread = read(server_fd, buffer, 2048);
行,並且不執行任何打印。 難道我做錯了什么?
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
int send_request() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[512] = {0};
char *hello = "Hello from server";
// Creating socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// Forcefully attaching socket to the port 8080
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
exit(EXIT_FAILURE);
}
// CONNECT TO HOST
struct hostent *he;
char* host = "www.columbia.edu";
he = gethostbyname(host);
if(!he) {
printf("Host doesn't exist!\n");
return 0;
}
address.sin_family = AF_INET;
bcopy(he->h_addr, &address.sin_addr, sizeof(struct in_addr));
address.sin_port = htons(80);
if(connect(server_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_in)) < 0) {
printf("Error in the connection");
return 0;
}
valread = read(server_fd, buffer, 2048);
printf("%s\n", buffer);
printf("%d\n", valread);
printf("%d\n", errno);
return 0;
}
int main(int argc, char const *argv[]) {
send_request();
return 0;
}
您正在連接到HTTP服務器。 HTTP協議指定客戶端(即與服務器建立連接的一方)必須首先發送請求。 您沒有發送請求,因此服務器不會向您發送回復。
另外,這是一個錯誤:
valread = read(server_fd, buffer, 2048);
printf("%s\n", buffer);
%s
格式說明符只能與C樣式的字符串一起使用。 不能用於任意數據。 一方面,它如何知道要輸出多少字節? 當前包含信息的唯一位置是valread
,您沒有將其傳遞給printf
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.