Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试使用C中的套接字从http网站检索html时,连接被拒绝_C++_Sockets_Connection Refused - Fatal编程技术网

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

C++ 尝试使用C中的套接字从http网站检索html时,连接被拒绝,c++,sockets,connection-refused,C++,Sockets,Connection Refused,我制作了一个非常简单的http客户端,它可以从http网站检索html并打印出来。但在使用connect函数时似乎出现了一些问题。使用perror时,我发现它给出了连接拒绝错误 这是我的密码 #include <string.h> #include <stdio.h> #include <iostream> #include <sys/socket.h> #include <unistd.h> #include <sys/typ

我制作了一个非常简单的http客户端,它可以从http网站检索html并打印出来。但在使用connect函数时似乎出现了一些问题。使用perror时,我发现它给出了连接拒绝错误

这是我的密码

#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;
}
这是输出

error: Connection refused
我通过网站的IP作为输入

我已经看到了所有其他类似的问题,但没有得到任何关于如何解决这一问题的答案,因为这一直发生在我尝试我的程序的每个网站上。
请说明如何解决此问题。

以下版本的代码适用于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
inet_pton3需要第一个参数来指定地址族,并且您已经为它传递了0,这与AF_inet不同,并且您必须根据您正在使用的协议族传递AF_inet

inet_pton3是一个独立于协议系列的转换例程,但它需要知道实际使用的是什么才能正确转换地址


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

虽然我使用linux mint,但我已尝试更改这一行:inet\u pton0,address,&URLaddress.sin\u addr.s\u addr;带有//inet\u pton0、address和URLaddress.sin\u addr.s\u addr;现在,它至少正在连接并给出某种输出错误:Success GET/HTTP/1.1,这仍然不令人满意,但比以前更好。感谢成功,因为perror的输出意味着没有错误。你打印回复了吗?
<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