在Python的客户机/服务器中使用简单套接字-我做错了什么?

在Python的客户机/服务器中使用简单套接字-我做错了什么?,python,sockets,server,client,Python,Sockets,Server,Client,我正在使用套接字制作一个简单的Python脚本。这是我的客户代码: import socket s = socket.socket() host = "172.31.26.54" port = 1337 print("Attempting to connect...") s.connect((host, port)) print("Connected. Now receving data from host.") print s.recv(1024) s.close() 这是我的服务器代码

我正在使用套接字制作一个简单的Python脚本。这是我的客户代码:

import socket

s = socket.socket()
host = "172.31.26.54"
port = 1337
print("Attempting to connect...")
s.connect((host, port)) 
print("Connected. Now receving data from host.")
print s.recv(1024)
s.close()
这是我的服务器代码:

import socket

s = socket.socket()
host = socket.gethostname()
print(host)
port = 1337
s.bind((host, port))

s.listen(5)
while True:
    c, addr = s.accept()
    print 'recived connection from ', addr
    c.send("Thank you for connecting. It really means a lot to me.")
    c.close()
注意:客户端代码中的“
host=“172.31.26.54
”是因为服务器代码在运行时打印(在第5行)”
ip-172-31-26-54

当我运行服务器代码时,然后将客户机
主机
更改为
socket.gethostname()
并在服务器上运行,它工作得很好。但是当我在不同的机器上运行代码时,客户机只会打印“尝试连接…”并卡住

编辑:我只是尝试使用公共ip而不是私有ip。这也不起作用


我做错了什么?

如果在云环境“ip-172-31-26-54”上运行,可能是防火墙或安全组之类的网络过滤器“-这是主机名,尽管它看起来像ipv4地址,但这并不意味着它是正确的。在服务器上,使用
ifconfig
ipconfig
或任何适用于您的系统的工具来查看实际地址。它在我的机器上运行良好,您可以编写代码。唯一的区别是我将
0.0.0.0
绑定为主机名。请注意,
0.0.0.0
会监听所有适配器,这可能是您不想要的。或者,您可以使用
127.0.0.1
@Luke。。。需要注意的是,
127.0.0.1
是内部环回地址,对外部计算机不可见。在服务器端,
打印(socket.gethostbyname(socket.gethostname())
-它可能解析为环回地址。