我有一堆将NMEA句子发送到URL / ip的设备。 看起来像这样
“$ GPGGA,200130.0,3447.854659,N,11014.636735,W,1,11,0.8,41.4,男,-24.0,M,* 53”
我想读取这些数据,解析它并将关键部分上传到数据库。我知道如何解析它并将其上传到数据库,但我完全失去了如何“读取”/接受/获取数据到python程序,以便我可以解析和上传。
我的第一个想法是将它指向Django页面然后让Djanog解析它并上传到数据库(数据将从Django站点访问)但它的NMEA句子不是HTTP请求所以Django拒绝它作为“消息请求语法错误“
读取发送到网址/ IP的NMEA句子的最佳(python)方式是什么?
感谢
答案 0 :(得分:1)
我假设你有一些具有以太网连接的硬件,它通过以太网连接输出NMEA字符串。这可能默认有一些随机的192.168.0.x ip地址并通过端口12002吐出数据
你通常会创建一个套接字来监听这个崩溃的数据
<强> server.py 强>
import socket
host = "" #Localhost
port = 12002
PACKET_SIZE=1024 # how many characters to read at a time
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((host,port))
sock.listen(5) # we should never have more than one client
def work_thread(client):
while True: #continuously read and handle data
data = client.recv(PACKET_SIZE)
if not data:
break # done with this client
processData(data)
while True:
client,addr = sock.accept() # your script will block here waiting for a connection
t = threading.Thread(target=work_thread,args=(client,))
t.start()
但有时您需要ping设备才能获取数据
<强> client.py 强>
import socket
host = "192.168.0.204" #Device IP
port = 12002
PACKET_SIZE=1024 # how many characters to read at a time
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host,port)) #connect to the device
while True: #continuously read and handle data
data = sock.recv(PACKET_SIZE)
processData(data)