mirzaD14 Asked: 2021-04-26 07:10:29 +0800 CST2021-04-26 07:10:29 +0800 CST 2021-04-26 07:10:29 +0800 CST 如何在 EC2 实例上打开套接字? 772 我想将网络摄像头视频从我的笔记本电脑发送到 aws EC2 实例。 我正在尝试遵循此处的建议和此处的代码。 我面临的问题是我不知道如何打开套接字并监听 EC2 上的传入流量。我的 EC2 是一个 Amazon Linux 免费套餐实例。无论我尝试什么,我都无法让它工作。 我添加了一个入站规则以允许我想监听的端口上的 TCP 流量。 如果有帮助,绑定到端口似乎不是问题,但似乎代码卡在socket.accept()链接 2 的代码行上。 如果有人向我展示如何正确执行此操作,我将不胜感激。 amazon-ec2 socket amazon-web-services websocket 2 个回答 Voted Fraggle 2021-04-26T11:00:52+08:002021-04-26T11:00:52+08:00 试试这个作为测试(代码来自这里): 在您的服务器上运行(调整 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 如果这不起作用,请发布更多详细信息(您的安全设置或类似的屏幕截图)。 Best Answer MLu 2021-04-26T16:47:06+08:002021-04-26T16:47:06+08:00 如果它被卡住,socket.accept()则意味着它正在等待连接。在客户端脚本中,您连接到什么 IP?它不能是localhost,也不能是实例私有 IP(例如172.31.x.x),而是它的公共 IP 地址- 您可以在 EC2 详细信息中找到它。另请注意,安全组必须从笔记本电脑的公共 IP(或所有 IP,但安全性要低得多)打开。
试试这个作为测试(代码来自这里):
在您的服务器上运行(调整 IP 和端口以匹配您的 ec2):
并尝试使用它从另一台机器发送数据(调整 IP 以匹配您的 EC2 公共 IP):
如果这不起作用,请发布更多详细信息(您的安全设置或类似的屏幕截图)。
如果它被卡住,
socket.accept()
则意味着它正在等待连接。在客户端脚本中,您连接到什么 IP?它不能是localhost
,也不能是实例私有 IP(例如172.31.x.x
),而是它的公共 IP 地址- 您可以在 EC2 详细信息中找到它。另请注意,安全组必须从笔记本电脑的公共 IP(或所有 IP,但安全性要低得多)打开。