2014-05-19 77 views
1

我通過套接字連接發送一些數據。我有一個時鐘在一個線程中滴答滴答。從那裏我得到結果到另一個功能;Python pickle錯誤的編碼

Midi.py

def startClock(self): 
     frame_rate = 24 
     interval = 1./frame_rate 
     while True: 
      if self.playing: 
       for i in range(0,8): 
        #do some irrelevant stuff here 
        quarter_frame = '0x{}{}'.format(i,x) 
        quarter_frame = int(quarter_frame, 16) 
        clock = [0xF1, quarter_frame] 
        yield(clock) 

Main.py

def startClock(self): 
    clock = midi.startClock() 
    for i in clock: 
     client.sendMessage(i) 
     print(i) 

,其輸出在客戶機側下面和哪個是正確的:

[241, 12] 
[241, 16] 
[241, 38] 
[241, 48] 
[241, 64] 
[241, 80] 
[241, 96] 
[241, 112] 
... 

當我通過t發送它Ø服務器,就像這樣:

def sendMessage(self, message): 
    self.s.send(pickle.dumps(message)) 

我得到一個迭代,如下所示(這不同於不定期,但似乎從1到去 - 16):

[241, 0] 
[241, 2] 
[241, 3] 
[241, 4] 
[241, 5] 
[241, 7] 
[241, 8] 
[241, 9] 
... 

在這裏,我收到消息:

def receiveMessage(self, conn, addr): 
    try: 
     while True: 
      data = pickle.loads(conn.recv(1024)) 
      print(data) 

哪裏出問題了?

+0

HM。你可以使用base64編碼http://base64encode.net/python-base64-b64encode來查看它是否真的是編碼問題 – Nicolas78

+0

爲什麼你有兩個'startClock(self)'方法? –

+0

Main.py中的一個處理按鈕點擊,另一個開始時鐘。 – boortmans

回答

0

昨天有人在這裏發佈了答案,但它似乎被刪除。無論如何,如果我改變要發送的字節的大小,我會在電線的另一側收到正確的輸出。
所以

data = pickle.loads(conn.recv(1024)) 

應該

data = pickle.loads(conn.recv(12))