Amazon-Web-Services

如何在 EC2 實例上打開套接字?

  • April 26, 2021

我想將網路攝像頭影片從我的筆記型電腦發送到 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

如果這不起作用,請發布更多詳細資訊(您的安全設置或類似的螢幕截圖)。

引用自:https://serverfault.com/questions/1061482