Найти - Пользователи
Полная версия: Про деление пакетов
Начало » Web » Про деление пакетов
1
SOUR
Есть программа, надо её распоточить, что не проблема, НО я не понимаю, зачем так было извращаться над первым элементов в списке 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 документе.
f_evgeny
Я понял это так:
- Откуда то порциями по 1024 считывается информация в виде сишных строк (разделитель \x00)
- Если есть значение в accumulated, оно прибавляется к первому элементу спереди (это неполное значение строки, считанное в прошлой итерации), после сложения в первом элементе получается строка, состоящая из не до конца считанной строки в прошлой итерации цикла и конца строки, считанного в текущей итерации
Идея примерно такая. ИМХО.
SOUR
Добавлю, что сервер скидывает XML документы.

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

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

p.s. Тема закрыта :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB