代码之家  ›  专栏  ›  技术社区  ›  Shobhit

在尝试使用C中的套接字从http网站检索html时,连接被拒绝

  •  0
  • Shobhit  · 技术社区  · 6 年前

    这是我的密码

    #include <string.h>
    #include <stdio.h>
    #include <iostream>
    
    #include <sys/socket.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    int main(int argc, char *argv[])
    {
        char *address;
        address = argv[1];
    
        int c_socket = socket(AF_INET, SOCK_STREAM, 0);
    
        struct sockaddr_in URLaddress;
    
        URLaddress.sin_family = AF_INET;
        URLaddress.sin_port = htons(80);
        inet_pton(0,address,&URLaddress.sin_addr.s_addr);
        int con = connect(c_socket, (struct sockaddr*) &URLaddress, 
        sizeof(URLaddress));
    
        perror("error");
    
        return 0;
    }
    

    这是输入

    151.101.13.5
    

    这是输出

    error: Connection refused
    

    我正在通过网站的IP作为输入。

    请告诉我如何解决这个问题。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Paul Ogilvie    6 年前

    以下版本的代码适用于Windows/MSC:

    int test(void)
    {
        char *address;
        int c_socket, con;
        struct sockaddr_in URLaddress;
        char request[] = "GET / HTTP/1.1\r\n\r\n";
        char response[4096];
        WORD wVersionRequested;
        WSADATA wsaData;
    
        wVersionRequested = MAKEWORD( 2, 2 );
    
        address = "151.101.13.5";
    
        if (WSAStartup (wVersionRequested, &wsaData)!= 0) {
            printf("DLL not found\n");
            return -1;
        }
        if ((c_socket = socket(AF_INET, SOCK_STREAM, 0)) ==  INVALID_SOCKET ) {
            printf("socket error: %d\n", WSAGetLastError());
            return -1;
        }
    
        URLaddress.sin_family = AF_INET;
        URLaddress.sin_port = htons(80);
        URLaddress.sin_addr.s_addr= inet_addr(address);
        con = connect(c_socket, (struct sockaddr*) &URLaddress, sizeof(URLaddress));
    
        send(c_socket, request, strlen(request), 0);
        recv(c_socket, response, sizeof(response), 0);
        WSACleanup();
    
        printf ("%s\n",response);
    
        return 0;
    }
    

    <title>Fastly error: unknown domain </title>
    </head>
    <body>
    <p>Fastly error: unknown domain: . Please check that this domain has been added to a service.</p>
    <p>Details: cache-fra19128-FRA</p></body></html>5¸`¡qu
    
        2
  •  0
  •   Luis Colorado    6 年前

    inet_pton(3) 需要第一个参数来指定地址族,并且您已经传递了 0 AF_INET ),你必须通过 家具

    内特普顿(3) 是一个独立于协议族的转换例程,但它需要知道实际使用的是什么才能正确地转换地址。

    顺便问一下,服务器是否正在侦听请求的地址和端口?在运行程序之前,您是否测试过浏览器是否能够从该地址获取内容?