【问题标题】:Windows Socket HTTP connection in CC中的Windows Socket HTTP连接
【发布时间】: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 动态缓冲区(或其他获取内存缓冲区的方法)。

标签: c windows sockets http


【解决方案1】:

哦,当然!将第 13 行更改为 char response[2048],header[]="GET / HTTP/1.1\r\nhost: www.youtube.com\r\n\r\n"; 并获得了我的 GET

【讨论】:

    猜你喜欢
    • 2014-02-15
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多