Форум сайта python.su
Есть программа, надо её распоточить, что не проблема, НО я не понимаю, зачем так было извращаться над первым элементов в списке packets, в каждой итерации…
accumulated = '' while True: data = sck.recv(1024) if not data: break packets = data.split('\x00') packets[0] = accumulated + packets[0] packets, accumulated = packets[:-1], packets[-1] pk="" for packet in packets: pk = parse(packet) process(pk)
Офлайн
Я понял это так:
- Откуда то порциями по 1024 считывается информация в виде сишных строк (разделитель \x00)
- Если есть значение в accumulated, оно прибавляется к первому элементу спереди (это неполное значение строки, считанное в прошлой итерации), после сложения в первом элементе получается строка, состоящая из не до конца считанной строки в прошлой итерации цикла и конца строки, считанного в текущей итерации
Идея примерно такая. ИМХО.
Офлайн
Добавлю, что сервер скидывает XML документы.
f_evgeny согласен с таким поведением, но не понятна соль, зачем такие манипуляции с первым элементом…
Отредактировано SOUR (Май 8, 2012 07:38:46)
Офлайн
Потому, что в первом элементе может быть не полная строка, а хвост строки. Ее начало было в последней итерации предыдущего цикла, но при считывании кусками по 1024, конец строки не поместился в последний элемент и считан в первой итерации текущего цикла. Полная строка получится, если их сложить.
Офлайн
f_evgeny
Да, действительно все логично, спасибо еще раз!
p.s. Тема закрыта :)
Офлайн