Здравствуйте, netch80, Вы писали:
AG>>>P.S. Проблему удалось решить — за счет контроля длины блоков. AG>>>Предыдущее решение — за счёт маркёра конца — не такое изящное и (по совету уважаемого товарища Pzz) я отказался от него.
M>>Маркер конца — вообще какая-то малоосмысленная штука.
N>Есть много примеров неплохой практики для такого маркера. N>SMTP, POP3, NNTP и прочие: маркер конца — строка из одной точки.
Плохие примеры. Эти протоколы разрабатывались в те времена, когда по ним общались не программы, а люди
N>HTTP chunked encoding: маркер конца — чанк длины 0.
Лень уточнять, о чем тут, но весь HTTP изначально текстовый человеко-читаемый, так что грабли растут примерно оттуда же
N>ATM: AAL5 для транспорта IP — бит пометки "последний фрагмент IP пакета" (если позанудствовать, тоже, вероятно, фрагмента, но уже на уровне IP). N>Да даже просто текстовый интерфейс с другой стороной: маркер конца — LF или CRLF, начало предполагается автоматически (пришёл на линк и послал AT\n). N>А пока он не пришёл — набираешь данные. Да, заранее тут не предскажут их длину, надо иметь свой лимит и возможность запасти до него. N>И это не противоречит возможности продублировать длиной в конце (для сверки) или CRC.
Маркер конца может быть полезен в купе с остальным, не более.
Вот тебе по UART'у шлют: "убить нельзя помиловать\r\n", а ты не вовремя влез и получил "нельзя помиловать\r\n". Маркер конца есть? Есть. Пошли убивать, сообщение вполне однозначное