0

私は、gpsトラッカーからのメッセージをキャッチし、サーバーのデータベースにメッセージを書き込むための単純なPythonスクリプトを書いています。

# -*- 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()

スクリプトをテストするには、自宅のPCをスクリプトとともに使用します

# -*- 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()

すべてがうまくいき、サーバーはメッセージをdbに書き込みます。utf-8を使用すると、Unicode文字でいっぱいになり、問題ありません。しかし、gpsトラッカーを使用すると、「xxSA░7d└╣」('xx \ x11 \ x01 \ x03SA \ x907d \ x84 \ x10 \ x0b2 \ x01 \ x00 \ x01 \\ xa7 \ r \n'のような奇妙なメッセージが表示されます。 )ただし、ドキュメントには、メッセージにはASCII記号のみが含まれていると記載されています。「socket.SOCK_RAW」オプションがあることを確認して使用しようとしましたが、「socket.error:[Errno93]プロトコルがサポートされていません」というメッセージが表示されました。

あなたは解決策が何であるか知っていますか?

デバイスはGT03bです。

4

1 に答える 1

0

GT03BのサーバーコマンドはASCIIですが、残りのコマンド(プロトコル番号、チェックサムなど)は単なるバイトストリームです。たとえば、「奇妙なメッセージ」は通常のLBS情報パッケージのように見えます。

詳細については、GT03Bプロトコルを参照してください。

于 2012-12-13T15:41:22.283 に答える