Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2012 16:30:43

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Про деление пакетов

Есть программа, надо её распоточить, что не проблема, НО я не понимаю, зачем так было извращаться над первым элементов в списке 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)

+ я не совсем понимаю принцип деления на строку ‘\x00’ озночающая пустой символ О.о, неужто символ NULL в 16ричном представлении лежит со всеми тегами в XML документе.



Офлайн

#2 Май 7, 2012 20:44:58

f_evgeny
От:
Зарегистрирован: 2010-08-16
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Про деление пакетов

Я понял это так:
- Откуда то порциями по 1024 считывается информация в виде сишных строк (разделитель \x00)
- Если есть значение в accumulated, оно прибавляется к первому элементу спереди (это неполное значение строки, считанное в прошлой итерации), после сложения в первом элементе получается строка, состоящая из не до конца считанной строки в прошлой итерации цикла и конца строки, считанного в текущей итерации
Идея примерно такая. ИМХО.



Офлайн

#3 Май 8, 2012 04:25:45

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Про деление пакетов

Добавлю, что сервер скидывает XML документы.

f_evgeny согласен с таким поведением, но не понятна соль, зачем такие манипуляции с первым элементом…



Отредактировано SOUR (Май 8, 2012 07:38:46)

Офлайн

#4 Май 8, 2012 09:56:01

f_evgeny
От:
Зарегистрирован: 2010-08-16
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Про деление пакетов

Потому, что в первом элементе может быть не полная строка, а хвост строки. Ее начало было в последней итерации предыдущего цикла, но при считывании кусками по 1024, конец строки не поместился в последний элемент и считан в первой итерации текущего цикла. Полная строка получится, если их сложить.



Офлайн

#5 Май 8, 2012 13:01:38

SOUR
От:
Зарегистрирован: 2010-09-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Про деление пакетов

f_evgeny
Да, действительно все логично, спасибо еще раз!

p.s. Тема закрыта :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version