Как отправить xon/xoff в случае бинарных данных?

В случае программного управления потоком данных мы используем стандартные символы xon и xoff (0x11 и 0x13) для приостановки и возобновления передачи. Но если мы хотим отправить двоичные данные, содержащие символы, совпадающие со значением ascii xon и xoff, какой набор символов мы должны использовать для отправки xon или xoff?


person user2907028    schedule 22.10.2013    source источник
comment
Вам необходимо разработать прикладной протокол, который позволит вам кодировать управляющие символы, а не отправлять их в необработанном виде.   -  person Barmar    schedule 22.10.2013
comment
какой набор символов мы должны использовать для отправки xon или xoff -- Termios позволит вам (пере)определить значения для мягкого управления потоком, но это не помогает при передаче двоичных данных. Либо закодируйте все двоичные данные (например, uuencode/uudecode, шестнадцатеричный код Intel или Motorola), либо используйте последовательность символов escape (чтобы данные, которые соответствуют XON и XOFF, можно было экранировать или закодировать).   -  person sawdust    schedule 25.10.2013


Ответы (3)


Простое решение - использовать кодировку base64, которая у вас есть в python.

base64.b64encode(yourData) - encode
base64.b64decode(yourData) - decode, 

это добавляет дополнительные накладные расходы, но отправляемые данные находятся в простом символьном формате. даже HDLC использовал base64, так что, я полагаю, это будет один из вариантов для вас.

person harsha    schedule 17.02.2014

Использование программного квитирования исключает отправку двоичных данных.

Если не считать чего-то эзотерического (отправка 9 бит/байт вместо 8 — очень нестандартно), нет никакой разницы между 2 из 256 различных двоичных данных и 2 кодами, выбранными для использования в качестве XON/XOFF.

Существуют различные протоколы, которые пытаются справиться с этим. Все они кодируют «двоичные данные» во что-то эффективное, но не однозначное отображение. Можно использовать escape-коды, сжатие, пакеты данных и т. д. Конечно, оба конца связи должны знать, как кодировать/декодировать. Это часто ограничивает ваш выбор. Если вы сомневаетесь, начните с преобразования двоичного кода в текст, так как его легче отлаживать. http://en.wikipedia.org/wiki/Binary-to-text_encoding

person chux - Reinstate Monica    schedule 06.11.2013

Чтобы иметь возможность использовать эти два специальных символа в качестве управляющих, вы должны убедиться, что они не встречаются в данных полезной нагрузки. Один из способов сделать это — закодировать полезную нагрузку с помощью сокращенного алфавита, не включающего специальные символы. Кодировки двоичного кода в текст, упомянутые в параллельном ответе, выполнят эту работу, но если критичны низкие накладные расходы, не зависящие от распределения входных байтов, то escapeless.

person Ivan Kosarev    schedule 04.06.2019