2014-05-19 62 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))