无法在使用Python的服务器上读取UDP数据包

2024-03-29 01:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从安装在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

我怎么可能不使用一个简单的python程序就可以读取wireshark中的包?有人知道我做错什么了吗?在


Tags: ofthein程序ip服务器localhostdata
1条回答
网友
1楼 · 发布于 2024-03-29 01:44:53
  1. 如果你按原样运行程序,它只在本地主机上监听,而Wireshark屏幕截图显示你正在用私有IP地址向“真正的”NIC发送数据包。

  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) ...

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

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

如果是的话,也许你的本地Windows防火墙会阻止连接?你能把它关掉一会儿吗?在

相关问题 更多 >