无法使用Python

时间:2016-01-25 09:01:38

标签: python sockets server udp

我正在尝试将安装在BeagleBoneBlack(Linux设备)上的网络摄像头中的视频流式传输到服务器(Windows服务器)。 BeagleBone使用DHCP(动态IP)连接到Internet,并且基本上将UDP数据包发送到服务器。在服务器端,我使用套接字实现了一个简单的python程序,它应该可以轻松读取来自特定IP或特定端口的UDP数据包。在wireshark中,我能够看到数据包到达服务器但python程序无法捕获它们。我试图听取不同的IP,例如'localhost'或特定的IP,但似乎没有任何效果。

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 个答案:

答案 0 :(得分:1)

  1. 如果您在发布时逐字地运行程序,它只会侦听localhost,而您的Wireshark屏幕截图表明您正在向"真实"具有私有IP地址的NIC。

  2. 你确定你的程序不起作用吗?当我用netcat命令提供它时:

    cat myfile | nc -u 127.0.0.1 5454

  3. 它起作用了:

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

    注意我是从localhost发送到localhost的。这加强了假设您有一个简单的网络配置/端口配置问题,而不是Python程序无法正常工作。

    在Windows计算机上执行netstat -a以查看您的程序是否真正侦听指定的地址。

    如果是,可能您的本地Windows防火墙阻止连接?你能试试一下吗?