代码之家  ›  专栏  ›  技术社区  ›  kashif

为什么这些腌制的数据在通过网络传输后不能取消领料?

  •  1
  • kashif  · 技术社区  · 6 年前

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

    logserver.py应该取消点击并打印到屏幕上,但它会引发一个错误。如果我使用pickle.loads,则键错误:“\x00”,如果我使用cpickle.loads,则它是一个eoferror

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

    python版本2.6.5

    为什么会这样?

    ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

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

    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 回复  |  直到 14 年前
        1
  •  0
  •   joshjdevl    14 年前

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