答案1
如果卡在了,socket.accept()
则表示正在等待连接。在客户端脚本中,您要连接到哪个 IP?它一定不是localhost
,也不是实例私有 IP(例如172.31.x.x
),而是它的公共 IP 地址- 您可以在 EC2 详细信息中找到它。另请注意,安全组必须从您的笔记本电脑的公共 IP(或从所有 IP,但安全性要差得多)打开。
答案2
尝试一下这个作为测试(代码来自这里):
在您的服务器上运行(调整 IP 和端口以匹配您的 ec2):
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 20 # Normally 1024, but we want fast response
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print "received data:", data
conn.send(data) # echo
conn.close()
并尝试使用此方法从另一台机器发送数据(调整 IP 以匹配您的 EC2 公共 IP):
#!/usr/bin/env python
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print "received data:", data
如果这不起作用,请发布更多详细信息(您的安全设置的屏幕截图或类似内容)。