2010-08-22 3 views
1

logexample.py регистрируется в сети с помощью logging.handlers.DatagramHandler, который распиливает (протокол 1) отправленные данные.Почему эти маринованные данные не рассыпаются после передачи по сети?

logserver.py должен быть распечатан и распечатан на экране, но вместо этого возникает ошибка. Если я использую pickle.loads затем KeyError: '\ 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 

ответ

0

Существует в документации о том, как использовать DataGramHandler example - это показывает, что датаграмма может быть отправлена ​​по нескольким пакетам, которые необходимо повторно собрать на принимающей стороне. Первые четыре байта первого пакета - это длина - вы передаете это в pickle.loads, а также маринованные данные. Вместо этого используйте пример кода.

+0

Спасибо, что указал мне в правильном направлении, не понимал, что есть дополнительные четыре байта. – kashif