【发布时间】: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 上运行