为什么这些腌制数据在通过网络传输后不会破坏?

时间:2010-08-22 09:07:10

标签: python pickle

logexample.py使用logging.handlers.DatagramHandler在网络上进行日志记录,它会发送(协议1)它发送的数据。

logserver.py应该是unpickle并打印到屏幕,但它会引发错误。如果我使用pickle.loads然后KeyError:'\ x00'如果我使用cPickle.loads它是一个EOFError

文件在这里 - http://gist.github.com/542543

Python版本2.6.5

为什么会这样?

-------------------------- THE FIX ------------------- --------

对于其他可能感兴趣的人,这里是固定处理程序

class LogHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = self.request[0]
        socket = self.request[1]
        out = pickle.loads(data[4:])
        record = logging.makeLogRecord(out)
        print record.msg

1 个答案:

答案 0 :(得分:0)

在如何使用DataGramHandler的文档中有example - 它表明数据报可以通过多个数据包发送,需要在接收端重新组装。第一个数据包的前四个字节是长度 - 您将其传递给pickle.loads以及pickle数据。请改用示例代码。