这是client.py课程,并且这是移动的课程。
import socket
c = socket.socket()
c.connect(('127.0.0.1', 9998))
name = input("Enter your name : ")
c.send(bytes(name, 'utf-8'))
data = c.recv(1024).decode()
print(data)
这是server.py课程,这门课是在mac book pro上。
import socket
s = socket.socket()
s.bind(('localhost', 9998))
s.listen(2)
print('server is waiting for connections..')
while True:
c, addr = s.accept()
name = c.recv(1024).decode()
print('connected with', addr, name)
st = "Hello, " + name
c.send(st)
c.close()
为什么会出现“连接被拒绝”错误?
2条答案
按热度按时间dy2hfwbg1#
您的客户端和服务器运行在 * 不同 * 的设备上。您的客户端正在尝试连接到本地环回IP
127.0.0.1
,只有当服务器与客户端运行在同一设备上时,该功能才能正常工作。这就是为什么您会收到“连接被拒绝”的消息-在127.0.0.1:9998
上没有服务器在本地侦听。如果客户端和服务器连接到同一网络(WiFi等),则客户端需要连接到该网络上服务器的实际LAN IP。
如果客户端和服务器连接到不同的网络(即,它们通过互联网相互连接),则客户端需要连接到服务器所连接网络的公共IP,并且该网络路由器需要配置 * 端口转发 * 以将传入连接路由到服务器设备。
另外,请注意,让服务器侦听
localhost
并不保证它能够接受来自其他设备的客户端,具体取决于localhost
的实现方式。它 * 可能 * 仅解析为127.0.0.1
。服务器应改为侦听通配符IP0.0.0.0
,以便侦听安装在该设备上的所有可用网络接口。或者,它也可以只侦听实际接收客户端连接的特定LANIP。9lowa7mx2#
为了呼应雷米刚才正确的说法,“连接 * 被拒绝”* 确实有点误导。它基本上意味着没有人在监听主机试图到达的地址和端口。它不是意味着“有人在那里,但他[主动...] '拒绝'与你交谈。”“连接失败” 可能是一个更好的术语,但我们在这里。