【发布时间】:2020-06-12 02:30:07
【问题描述】:
我正在尝试发出 HTTP GET 请求,但我从我的 recv() 收到失败错误。 有人可以帮忙吗?
代码:
#include <stdio.h>
#include <winsock2.h>
int main(){
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
int sock;
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(80);
server_address.sin_addr.s_addr = inet_addr("216.58.202.14");
sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
char *response,*header;
header="GET / HTTP/1.1\r\nhost: www.youtube.com\r\n\r\n";
response="";
int connection = connect(sock,(struct sockaddr*) &server_address,sizeof(server_address));
if(connection!=0){
printf("error");
return 1;
} else {
if(send(sock,header,sizeof(header),0)<0) return 0;
printf("Sent\n");
if(recv(sock,response,sizeof(response),0)<0) return 0;
printf("Recved\n");
printf("response:\n%s",response);
}
return 0;
}
输出:
Sent
gcc:
gcc clientHTTP.c -o clientHTTP.exe -l Ws2_32
【问题讨论】:
-
response=""不是你需要的。这将response指向一个文字字符串。您不能将其用作接收的内存缓冲区。malloc动态缓冲区(或其他获取内存缓冲区的方法)。