2016-01-25 2 views
3

Я пытаюсь передать видео с веб-камеры, установленной на BeagleBoneBlack (устройство Linux), на сервер (сервер Windows). BeagleBone подключается к Интернету с использованием DHCP (динамический IP) и в основном отправляет UDP-пакет на сервер. На стороне сервера я реализовал простую программу python, используя сокеты, которые должны легко читать UDP-пакет, поступающий с определенного IP-адреса или на определенный порт. В wirehark я могу видеть пакеты, поступающие на сервер, но программа python не может их поймать. Я пытался прослушивать разные IP-адреса, такие как «localhost» или конкретный IP-адрес, но ничего не работает.Невозможно прочитать UDP-пакеты на сервере с помощью Python

Python на стороне сервера программы:

import socket 

IP = '192.168.23.240' #IP of the BeagleBone on Wireshark 
IP = '109.164.170.155' #IP of the router in which the BeagleBone is attached 
IP = '0.0.0.0' #localhost 
IP = '' #localhost 
IP = '192.168.0.21' #IP localhost server 
IP = 'localhost' #localhost 
PORT = 5454 

if __name__ == "__main__": 

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    s.bind((IP,PORT)) 

    f = open('file.mp4','wb') 
    data, addr = s.recvfrom(4096) 
    print 'Receiving from: ' +str(addr) 

    for i in xrange(1000): 
     f.write(data) 
     data, addr = s.recvfrom(4096) 
     print 'receiving from ' + str(addr) + ' ...' 

    f.close() 
    s.close() 

В Wireshark стороне сервера:

enter image description here

Как это возможно, что я могу прочитать пакеты в Wireshark, но не с помощью простого питона программа? Кто-то знает, что я делаю неправильно здесь?

ответ

1
  1. Если запустить программу дословно, как вы в курсе, он слушает локальный только, в то время как ваш скриншот Wireshark показывает, что вы для отправки пакетов «реального» NIC с частным IP-адресом.

  2. Вы уверены, что программа не работает? Когда я кормила его с помощью команды Netcat следующим образом:

    cat myfile | nc -u 127.0.0.1 5454

он работал:

receiving from ('127.0.0.1', 38182) ... 
receiving from ('127.0.0.1', 38182) ... 
receiving from ('127.0.0.1', 38182) ... 

Примечание я отправлял с локального хоста на локальный. Это усиливает гипотезу, что у вас есть простая конфигурация сети/проблема конфигурации порта, а не программа Python, не работающая.

Сделайте netstat -a на компьютере с Windows, чтобы узнать, действительно ли ваша программа прослушивает указанный адрес.

Если это так, может быть, ваш локальный брандмауэр Windows блокирует соединение? Можете ли вы попытаться отключить его на мгновение?

+0

Да, программа как прослушивает localhost, но я также пробовал IP, например 127.0.0.1 или IP Beaglebone: 192.168.23.240, который дал мне ошибку «[Errno 10049]» Запрашиваемый адрес недействителен его контекст ». В UDP может быть межсетевой экран, но я не понимаю, почему wirehark может их читать. Кстати, я знаю, что отправка файла с использованием UDP не самая лучшая, но я просто тестировал соединение. – lcit

Смежные вопросы