【问题标题】:Connection refused to Python TCP server from C++ TCP client on LocalHost从 LocalHost 上的 C++ TCP 客户端连接到 Python TCP 服务器被拒绝
【发布时间】:2023-01-14 01:02:58
【问题描述】:

我正在尝试将一个用 C++ 编写的简单 TCP 客户端连接到一个用 Python 编写的简单 TCP 服务器。我知道我的服务器可以正常工作,因为我可以将一个用 Python 编写的简单 TCP 客户端连接到它,但是每当我尝试将我的 C++ TCP 客户端连接到我的 Python TCP 服务器时,我都会收到连接被拒绝的错误。

这是我的 Python TCP 服务器代码:

import socket

HOST = "127.0.0.1"
PORT = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
print("Listening...")
s.listen(1)
conn, addr = s.accept()
print("Accepted connection!")

这是我的 C++ TCP 客户端代码:

#ifdef __WIN32__

# include <winsock2.h>

#else
# include <sys/socket.h>
#endif

#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>

#include "Client.h"

    Client::Client(int port_number) {
        if (client_socket == -1) {
            //Create socket
            client_socket = socket(AF_INET, SOCK_STREAM, 0);
            if (client_socket == -1) {
                perror("Could not create socket");
                return;
            }

            std::cout << "Socket created\n";
        }

        std::string address = "127.0.0.1";

        struct sockaddr_in server;
        server.sin_family = AF_INET;
        server.sin_port = htons(port_number);

        inet_pton(AF_INET, address.c_str(), &server.sin_addr);
        std::cout << "PORT: " << ntohs(server.sin_port) << std::endl;

        // Connect to remote server
        int connection_result = connect(client_socket, (struct sockaddr *) &server, sizeof(server));
        if (connection_result < 0) {
            perror("connect failed. Error");
            return;
        }

        std::cout << "Connected\n";
    }

这是 TCP 客户端的 .h 文件:

class Client {
private:
public:
    int port_number;
    int client_socket = -1;
    int client_fd;

    Client(int port_number);
};

当我尝试将我的 TCP 客户端连接到我的 TCP 服务器时,出现以下错误:

Socket created
PORT: 9999
connect failed. Error: Connection refused

我在我的 Windows 机器上的 Windows Linux 子系统上运行我的 C++ TCP 客户端。

我将不胜感激在这件事上的帮助。

【问题讨论】:

  • 可能有防火墙阻止了端口。
  • “我在我的 Windows 机器上的 Windows Linux 子系统上运行我的 C++ TCP 客户端。”- 你的服务器在哪里运行?也在 WSL 上?您的 Python 客户端在哪里运行?确保它们都在同一系统和同一环境 (WSL) 中运行。
  • Connection refused应该是端口畅通但无人监听时的响应。如果您可以窥探本地主机,检查数据包跟踪,您应该会看到返回的 RST 数据包。
  • 等一下。当你在 Windows 和 WSL 中运行东西时,我怀疑它是否仍然算作本地主机。是的,基本上是 Steffen 刚才说的。
  • 感谢您的洞察力,我现在也会让我的服务器在 WSL 上运行

标签: python c++ tcp


【解决方案1】:

我发现出了什么问题。我的 Python 服务器在 Windows 上运行,但我的 C++ 客户端在 WSL 上运行。这导致了连接问题。我更改了我的服务器,使其也可以在 WSL 上运行,这解决了连接问题。

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 2016-04-22
    • 2016-09-15
    • 1970-01-01
    • 2019-06-18
    • 2017-01-26
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多