Я хочу отправить видео с веб-камеры с моего ноутбука на aws EC2 instance.
Я пытаюсь следовать предложениям из здесь и коду из здесь.
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как открыть сокет и прослушивать входящий трафик на EC2. Мой EC2 - это экземпляр Amazon Linux free tier. Что бы я ни пробовал, я не могу заставить его работать.
Я добавил входящее правило, чтобы разрешить TCP-трафик на порту, который я хочу прослушивать.
Если это поможет, привязка к порту не кажется проблемой, но кажется, что код застревает на socket.accept()
строке кода из ссылки 2.
Я был бы признателен, если бы кто-нибудь показал мне, как правильно это сделать.
При использовании inotify
следует смотреть событие CLOSE _ WRITE
, а не CREATE
.
Если рекурсивный мониторинг не требуется, можно просмотреть incrond
(и incrontab
)
. Кроме того, можно просто запланировать rsync
запуск с коротким интервалом (т.е. 1 мин) и очистить исходный dir в нерабочее время, когда можно остановить SFTP
EDIT: похоже, что библиотека выбора не предоставляет событие CLOSE _ WRITE
, а только MODIFY
(см. здесь ). Проблема с MODIFY
заключается в том, что любая запись инициирует отдельное событие, что означает, что загрузка одного большого файла может вызвать неопределенное количество событий MODIFY
.
Если вы хотите продолжить использование библиотеки уведомлений, я предлагаю вам оценить incrond
, lsyncd
или inotifywait
Что касается простого подхода rsync
, вы, безусловно, можете завершить передачу частично загруженного файла, который, однако, будет полностью передан в следующем цикле rsync
На стороне-получателе следует обязательно обрабатывать только полностью переданные файлы (вещь, которую следует проверить даже при подходе уведомления).
В более широком смысле, я настоятельно рекомендую вам протестировать с помощью репрезентативной выборки размера файла, потому что тестирование с небольшими файлами может скрыть некоторые проблемы, связанные с таймингом, которые влияют на большие файлы.
-121--480840-Какова версия платформы .Net? При обновлении Exchange 2013 до CU23 необходимо установить .Net Framework 4.8, а затем выполнить обновление до CU23.
Не могли бы вы загрузить файл установки exchange 2013 cu23 в блоге Майкрософт и проверить, продолжается ли эта проблема?
Как ответил выше Вик Вега, вы могли бы следовать инструкциям и снова запустить программу установки exe.
-121--480844- Если он застрял в 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-адрес в соответствии с вашим общедоступным IP-адресом EC2 ):
#!/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
Если это не сработает, опубликуйте дополнительную информацию (снимки экрана вашей безопасности setup или аналогичный).