2012-08-13 114 views
0

我正在写一个简单的python脚本来捕获来自gps跟踪器的消息并将消息写入服务器的db。来自gps跟踪器的TCP消息

# -*- coding: utf-8 -*- 
import socket, string 
import MySQLdb 

def write_message(x): 
    db = MySQLdb.connect(host="localhost", user="root", passwd="****", db="****", charset='utf8') 
    cursor = db.cursor() 
    sql = '''INSERT INTO test(test_c) VALUES ('%(test_c)s') '''%{"test_c":x} 
    cursor.execute(sql) 
    db.commit() 
    db.close() 
    return x 

HOST = "" 
PORT = 50007 

srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
srv.bind((HOST, PORT)) 
while 1: 
    print u"Listen to " + str(PORT) 
    srv.listen(1)    
    sock, addr = srv.accept() 
    while 1: 
     pal = sock.recv(2048) 
     if not pal: 
      break 
     print u"Recieved %s:%s:" % addr, pal 
     lap = write_message(pal) 
    sock.close() 

要测试脚本,我用我的家用电脑与脚本

# -*- coding: utf-8 -*- 
import socket 

HOST = '****' 
PORT = 50007    
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
mes = u'a' 
s.sendall(mes) 
s.close() 

一切顺利和服务器数据库中写入消息。使用utf-8时,它们充满了unicode字符,并没有问题。但是当我使用gps tracker时,我发现了一些奇怪的消息,比如“xxSA░7d└╣”('xx \ x11 \ x01 \ x03SA \ x907d \ x84 \ x10 \ x0b2 \ x01 \ x00 \ x01 \\ xa7 \ r \ n' )但文档说消息只包含ascii符号。 我发现有“socket.SOCK_RAW”选项并试图使用它,但得到了“socket.error:[Errno 93] Protocol not supported”。

你知道什么是解决方案吗?

该设备是GT03b。

回答

0

GT03B的服务器命令是ASCII的,但其余的(协议号,校验和等)只是一个字节流。例如,您的“陌生信息”似乎是一个正常的LBS信息包。

有关更多信息,请参阅GT03B协议。

+0

我以为相同,并将其转换为字节。当我改变我的位置(〜1公里)时,它不会改变。 – 2012-12-13 21:22:40

+0

LBS软件包不包含GPS数据,只包含关于手机提供商,手机信号塔等信息。如果软件包以xx \ x10开头,那么它是一个GPS软件包。 – Aderstedt 2012-12-13 21:33:22

+0

我在github上为GT03B提供了我的原始服务器软件:https://github.com/erikaderstedt/GPSUplink – Aderstedt 2012-12-13 21:33:56