如何用Python接收来自互联网的UDP数据包?
问题:Windows笔记本通过Python接收4G网络设备的UDP数据包
我希望在Windows笔记本电脑上使用Python接收并处理来自非本地(WiFi)网络设备的UDP数据包。我查阅了大量讲解Python发送和接收UDP数据包的教程,但大多数都是演示在同一台电脑或同一局域网内设备间的操作。我想要接收来自仅连接LTE/4G网络的智能手机的UDP数据包。
我使用以下代码在笔记本上接收UDP数据包:
import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('0.0.0.0', 1234)) # takes tuple as input argument while True: try: try: message,addr = server_socket.recvfrom(4096) # package size, expressed in bytes. Seems like arbritrary number? print("Data received from node: " + str(message)) except Exception as e: print(e) print("Failed package delivery") except (KeyboardInterrupt, SystemExit): print("Exited manually") raise
目前可行的情况是:当智能手机与笔记本处于同一WiFi网络,且将目标IP设置为笔记本的私有IP时,程序可以通过安卓应用接收UDP消息。
但当我将目标IP改为笔记本的公网IP,并让智能手机断开WiFi仅连接4G/LTE网络时,Python程序无法接收到任何数据,即使我关闭了笔记本的Windows防火墙。
我的疑问是:
- 我发现笔记本的公网IP与同一WiFi网络下的其他设备相同(应该是路由器的公网IP)。如果公网IP无法唯一标识我的笔记本,UDP数据包如何能到达我的笔记本?是否需要提供更多信息?或者我应该使用其他IP地址?
- 是不是防火墙仍需要进行一些调整?
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

