Amazon-Web-Services
如何在 EC2 實例上打開套接字?
我想將網路攝像頭影片從我的筆記型電腦發送到 aws EC2 實例。
我面臨的問題是我不知道如何打開套接字並監聽 EC2 上的傳入流量。我的 EC2 是一個 Amazon Linux 免費套餐實例。無論我嘗試什麼,我都無法讓它工作。
我添加了一個入站規則以允許我想監聽的埠上的 TCP 流量。
如果有幫助,綁定到埠似乎不是問題,但似乎程式碼卡在
socket.accept()
連結 2 的程式碼行上。如果有人向我展示如何正確執行此操作,我將不勝感激。
如果它被卡住,
socket.accept()
則意味著它正在等待連接。在客戶端腳本中,您連接到什麼 IP?它不能是localhost
,也不能是實例私有 IP(例如172.31.x.x
),而是它的公共 IP 地址- 您可以在 EC2 詳細資訊中找到它。另請注意,安全組必須從筆記型電腦的公共 IP(或所有 IP,但安全性要低得多)打開。
試試這個作為測試(程式碼來自這裡):
在您的伺服器上執行(調整 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
如果這不起作用,請發布更多詳細資訊(您的安全設置或類似的螢幕截圖)。