2016-01-25 126 views
3

我試圖將安裝在BeagleBoneBlack(linux設備)上的攝像頭的視頻流式傳輸到服務器(Windows服務器)。 BeagleBone使用DHCP(動態IP)連接到Internet,並基本上將UDP數據包發送到服務器。在服務器端,我使用套接字實現了一個簡單的Python程序,它應該可以輕鬆讀取來自特定IP或特定端口的UDP數據包。在wireshark中,我能夠看到數據包到達服務器,但python程序無法捕捉到它們。我試圖聽取不同的IP,如'本地主機'或特定的IP,但似乎沒有任何工作。無法使用Python讀取服務器上的UDP數據包

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的數據包,但沒有使用一個簡單的Python程序?有人知道我在這裏做錯了什麼?

回答

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程序無法正常工作。

在Windows機器上執行netstat -a以查看您的程序是否真的在指定的地址上偵聽。

如果有,可能是您的本地Windows防火牆阻止了連接?你可以嘗試關閉它一會兒嗎?

+0

是的,該程序是聽本地主機,但我也嘗試過IP,如127.0.0.1或Beaglebone的IP:192.168.23.240這給了我一個錯誤「[Errno 10049]」請求的地址無效其上下文'「。 UDP上可能有防火牆,但我不明白wireshark爲什麼能夠讀取它們。順便說一句,我知道使用UDP發送文件不是最好的,但我只是測試連接。 – lcit