在Python的客户机/服务器中使用简单套接字-我做错了什么?
我正在使用套接字制作一个简单的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() 这是我的服务器代码
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())
-它可能解析为环回地址。