【问题标题】:Python Client - C++ Server Connection Refused ErrorPython 客户端 - C++ 服务器连接被拒绝错误
【发布时间】:2016-09-15 05:30:13
【问题描述】:

所以我正在尝试使用 Python 作为客户端和 C++ 作为服务器来运行客户端-服务器应用程序。

两者在不同的机器上——现在我在我的 macbook pro 上运行 python 客户端,服务器是我拥有的 linux 桌面。

我可以通过 ssh 进入我的 linux 机器,如下所示:

ssh username@address.hopto.org

然后输入我的密码

尽管 ssh 没有问题,但我无法让端口/套接字连接正常工作。

这是我的python代码:

import socket, time

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('username@address.hopto.org', 9999))
print client.send('Hello world!'), 'bytes sent.'
time.sleep(0.2)
print 'Received message:', client.recv(1024)

这是我的 C++ 服务器(从这个网站借来的:http://www.cs.utah.edu/~swalton/listings/sockets/programs/part2/chap6/simple-server.c

#define MY_PORT     9999
#define MAXBUF      1024

int main(int Count, char *Strings[])
{   int sockfd;
    struct sockaddr_in self;
    char buffer[MAXBUF];

    /*---Create streaming socket---*/
    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    {
        perror("Socket");
        exit(errno);
    }

    /*---Initialize address/port structure---*/
    bzero(&self, sizeof(self));
    self.sin_family = AF_INET;
    self.sin_port = htons(MY_PORT);
    self.sin_addr.s_addr = INADDR_ANY;

    /*---Assign a port number to the socket---*/
    if ( bind(sockfd, (struct sockaddr*)&self, sizeof(self)) != 0 )
    {
        perror("socket--bind");
        exit(errno);
    }

    /*---Make it a "listening socket"---*/
    if ( listen(sockfd, 20) != 0 )
    {
        perror("socket--listen");
        exit(errno);
    }

    /*---Forever... ---*/
    while (1)
    {   
        int clientfd;
        struct sockaddr_in client_addr;
        int addrlen=sizeof(client_addr);

        /*---accept a connection (creating a data pipe)---*/
        clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
        printf("%s:%d connected\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));

        /*---Echo back anything sent---*/
        send(clientfd, buffer, recv(clientfd, buffer, MAXBUF, 0), 0);

        /*---Close data connection---*/
        close(clientfd);
    }

    /*---Clean up (should never get here!)---*/
    close(sockfd);
    return 0;
}

我实际上已经为 python/客户端尝试了两个不同的东西:

如果我这样写:

client.connect(('username@address.hopto.org', 9999))

我收到此错误: socket.gaierror: [Errno 8] nodename or servname provided, or not known

如果我这样做:

client.connect(('address.hopto.org', 9999))

没有用户名部分...我收到此错误:

socket.error: [Errno 61] Connection refused

我想这是因为我的 Linux 机器上有一个密码,它“阻止”了连接,但我不知道如何在此处包含它。

我是网络代码的初学者,所以其中很多内容对我来说非常陌生。

【问题讨论】:

  • 连接地址将是 IP 地址 (127.0.0.1) 或 DNS 名称 (address.hopto.org)。 @ 表示法用于电子邮件。您可以通过 telnet address.hopto.org 9999 来查看服务器是否已启动。在服务器本地的盒子和远程盒子上试一试。您还可以查看 netstat -alnp |服务器框上的grep 9999。您正在寻找 LISTEN 符号。

标签: python c++ linux sockets networking


【解决方案1】:

连接被拒绝通常意味着主机可访问但端口未打开。
可能是您的请求被防火墙阻止或您的服务器运行不正常。

为了避免防火墙问题。我建议你可以在与服务器相同的机器上运行你的 python 脚本,并首先使用 127.0.0.1 连接它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多