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"))
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"))