Я использую классы qextserialport в Qt для реализации последовательной передачи между устройствами. Теперь мне нужно отправить файл между устройствами, подключенными через USB, используя последовательный порт. В последние недели я использовал серийный порт для различных функций, но понятия не имею, с чего начать. Я думал о чтении данных, управляемых событиями, пока не осталось больше данных для чтения, определил размер (число байтов) файла перед отправкой и отправил его вместе с данными, чтобы было ясно, пропадут ли данные. У меня также есть правильная функция, которая вычисляет 16-битную контрольную сумму CCIITT, так что я могу использовать ее и для проверки. Поэтому мой вопрос:
Может кто-нибудь отправить мне ссылку на сайт, который мог бы помочь решить мою проблему и объяснить мне, каков был бы самый простой и эффективный способ отправить файл и получить файл через класс qextserialport в Qt. Любая помощь будет огромной!
Вам нужен протокол. Простой может быть:
отправить длину имени файла в виде необработанного двоичного числа, например 2 байта в сетевом порядке байтов
(максимальная длина имени 65535 байт)
отправить столько байтов имени файла, закодированного в UTF-8
отправьте размер файла в виде необработанного двоичного числа, например 4 байта в сетевом порядке (максимальный размер файла 4 гигабайта)
отправить столько байтов содержимого файла
Вы можете добавить информацию, такую как дата файла и контрольная сумма. Более продвинутым было бы разделить файл на куски, поэтому в случае ошибки передачи вам не нужно пересылать все заново. И т.п.
Кроме того, изучите протоколы, такие как Kermit, xmodem, zmodem, чтобы увидеть, как это было сделано в эпоху модемов и BBS. Может быть, использовать такой протокол вместо того, чтобы создавать свой собственный.
Примечание: пока вы могли бы использовать QDataStream
Требуется надежный канал, поэтому это не так просто, как может показаться на первый взгляд (требуется дополнительная буферизация).
Других решений пока нет …