Socket Error : No connection could be made because targeted machine actively refused it

Socket Error : No connection could be made because targeted machine actively refused it

Note : This problem has been completely solved, as was am running client.py before server.py

刚开始使用套接字编程,我创建了以下代码并期望打印一些字节消息,但它没有这样做。

我只想让任何人都可以看到这条消息 机器。但是机器拒绝这样做。

这是我的代码:

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 12048

s.bind((socket.gethostname(), port))

s.listen()

while True:
    c, addr = s.accept()
    print("Got connection from", addr)

    c.send(bytes("Thank you", "utf-8"))

client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 12048

s.connect(('192.168.0.1', port))

msg = s.recv(1024)
print(msg.decode("utf-8"))

一些图片可以更好地解释我的错误:

如有任何帮助,我们将不胜感激!!!

看起来在 server.py 脚本中您使用 s.bind((socket.gethostname(), port)) 其中 socket.gethostname() 是主机名,但在 client.py 脚本中您使用 s.connect(('192.168.0.1', port)) 其中'192.168.0.1' 是您尝试连接的主机名。

我想你有 socket.gethostname() != '192.168.0.1' 这就是问题所在。

此外,您可以使用此解决方案绑定到主机上的所有可用 IP 地址 Python socket bind to any IP?

让我们使用 listen_ip = socket.gethostbyname(socket.gethostname()) 进行连接,因为 socket.gethostname() 可能 return 主机名而不是 IP,如果它是 python 本地网络中的 dns 解析器将无法解决本地名称,而不是 DNS。

并稍后用作 s.bind((listen_ip, port))s.connect((listen_ip, port))

经过一些调试后,我为您提供了一个可行的解决方案

有需要的脚本。

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
port = 12_048

s.bind((host, port))

s.listen()
print("Server listening @ {}:{}".format(host, port))

while True:
    c, addr = s.accept()
    print("Got connection from", addr)

    c.send(bytes("Thank you", "utf-8"))

client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.1.162'  # The IP printed by the server must be set here

# or we can set it using env variable named SERVER_IP
if 'SERVER_IP' in os.environ:
    host = os.environ['SERVER_IP']

port = 12048

print("Connecting to {}:{}".format(host, port))
s.connect((host, port))

msg = s.recv(1024)
print(msg.decode("utf-8"))

在聊天对话中,我们得出结论,问题中的硬编码 IP 不正确。该解决方案确实具有他需要的 IP,但在每种情况下都会有所不同。请记住,server.py 需要先启动,当您看到打印的 Server listening @ IP:12048 时,在 client.py 中写入该 IP 并启动它。即使您已经知道 IP,也需要在看到该行后启动客户端,因为服务器需要一些时间准备就绪,如果客户端在未准备好时尝试连接到服务器,则会崩溃。

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname(socket.gethostname())
port = 12048

s.bind((host, port))

s.listen()
print("Server listening @ {}:{}".format(host, port))

while True:
    c, addr = s.accept()
    print("Got connection from", addr)

    c.send(bytes("Thank you", "utf-8"))

client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '192.168.1.162'  # The IP printed by the server must be set here
port = 12048

print("Connecting to {}:{}".format(host, port))
s.connect((host, port))

msg = s.recv(1024)
print(msg.decode("utf-8"))