如何在 EC2 实例上打开套接字?

如何在 EC2 实例上打开套接字?

我想将我的笔记本电脑上的网络摄像头视频发送到 AWS EC2 实例。

我正在尝试遵循这里以及来自的代码这里

我面临的问题是我不知道如何打开套接字并监听 EC2 上的传入流量。我的 EC2 是 Amazon Linux 免费套餐实例。无论我怎么尝试,都无法让它工作。

我添加了一条入站规则以允许我想要监听的端口上的 TCP 流量。

如果有帮助的话,绑定到端口似乎不是一个问题,但似乎代码卡在了socket.accept()链接 2 的代码行上。

如果有人能告诉我如何正确地做到这一点,我将不胜感激。

答案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

如果这不起作用,请发布更多详细信息(您的安全设置的屏幕截图或类似内容)。

相关内容