【发布时间】:2020-06-17 18:45:47
【问题描述】:
Server.py(在我的 aws ec2 实例上运行)
import socket
s = socket.socket()
host = socket.gethostbyaddr('aws.ec2.public.ip')[0]
port = 12345
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print('Got connection from', addr)
c.send('Thank you for connecting'.encode())
c.close()
Client.py(在我的本地电脑上运行)
import socket
s = socket.socket()
host = socket.gethostbyaddr('aws.ec2.public.ip')[0]
port = 12345
s.connect((host, port))
print(s.recv(1024).decode())
s.close()
授予所有入站和出站 TCP 流量
服务器代码没有显示错误。 但是客户端代码说
Traceback (most recent call last):
File "/Users/sohamjain/Desktop/client.py", line 7, in <module>
s.connect((host, port))
TimeoutError: [Errno 60] Operation timed out
>>>
通过 rdp 客户端连接 EC2 实例效果很好
当我在本地主机上运行这两个脚本时,它们似乎工作正常。 但在 AWS EC2 实例的情况下,它不会。 我哪里做错了?
【问题讨论】:
-
您看到什么类型的错误?例如,您能否使用 SSH 从客户端服务器连接到“服务器”服务器(您说您已打开所有端口)。
-
还要确认
server.py的实例不会知道它有那个公共地址。它只会知道它拥有私有 IP 地址,因为互联网网关在接收流量时执行入站 NAT 转换以将公共 IP 映射到私有 IP。这可以通过运行ifconfig来确认
标签: python amazon-web-services sockets amazon-ec2 tcp