如何使用Python捕获UDP数据包

时间:2015-08-27 17:18:17

标签: python python-2.7 sockets udp qgis

事实&上下文元素: 我需要捕获来自GPS设备的数据(纬度,经度),并将其重新设计并使其适用于其他应用程序(QGIS)。为此,我尝试执行(我最初想的是一个简单的)基于python的模块。 根据线鲨分析。

Source        Destination     Protocol     length   info
192.168.0.1   225.2.5.1       UPD             136   source port : 1045  destination port:6495

我已尝试在各种来源上找到此代码,例如one

import socket
import os
UDP_IP = "225.2.5.1"
UDP_PORT = 6495
sock = socket.socket(socket.AF_INET, # Internet
                  socket.SOCK_DGRAM) # UDP
 sock.bind((UDP_IP, UDP_PORT))
while True:
 data, addr = sock.recvfrom(4096) # buffer size is 1024 bytes
 print "received message:", data
os.system("pause")

问题
这个代码对我来说不起作用。控制台窗口是否崩溃(尽管os.system("暂停")或无限期运行。因为我不熟练python编程或网络我已经用其他IP地址和端口测试了提供的代码。由于没有结果,我也开始混合它们。最后,放弃并决定分享我的社区问题。
目标: 我需要能够使用python 2.7访问此UDP框架中包含的数据,将它们保存在我的编程项目的下一步的变量(数据)中。
感谢您的阅读和帮助

1 个答案:

答案 0 :(得分:1)

您应该从Windows cmd-console或powershell启动您的python程序,而不是从资源管理器启动,然后窗口保持打开状态,您会看到错误消息。删除缩进错误和最后一行。请确保您的计算机具有给定的IP地址。将您的套接字绑定到任何地址:

import socket
UDP_IP = "0.0.0.0"
UDP_PORT = 6495
sock = socket.socket(socket.AF_INET, # Internet
                  socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
    data, addr = sock.recvfrom(4096)
    print "received message:", data