2014-01-24 4 views
0

Я использую классы qextserialport в Qt для реализации последовательных передач между устройствами. Теперь мне нужно отправить файл между устройствами, подключенными через USB, используя serialport. Я использовал serialport для различных функций за последние недели, но я понятия не имею, с чего начать это внедрение. Я думал о чтении данных, управляемых событиями, пока не будет больше данных для чтения, определите размер (количество байтов) файла перед рукой и отправьте его вместе с данными, чтобы было ясно, пропали ли данные. У меня также есть правильная функция, которая вычисляет контрольную сумму CCIITT 16 бит, поэтому я могу использовать ее для проверки. Поэтому мой вопрос:Отправка файла через qextserialport

Может кто-нибудь, пожалуйста, присылайте мне ссылку на сайт, который может помочь решить мою проблему и объяснить мне, какой был бы самый простой и эффективный способ отправки файла и получения файла через класс qextserialport в Qt. Любая помощь будет awsum!

ответ

0

Вам нужен протокол. Простой один может быть: длина

  • отправить имени файла в качестве исходного двоичного числа, например 2 байта в сетевом порядке байт (Максимальная длина имени 65535 байт)

  • отправить что много байт имени файла , закодированные с UTF-8

  • размер файла отправить в качестве исходного двоичного числа, например 4 байта в сетевом порядке байтов (максимальный размер файла 4 гигов)

  • отправить, что количество байтов файла прод ents

Возможно, вы захотите добавить информацию, такую ​​как дата файла и контрольная сумма. Более продвинутым было бы разделение файла на куски, поэтому, если есть ошибка передачи, вам не нужно повторно отправлять все. И т.д.

Также изучите протоколы, такие как Kermit, xmodem, zmodem, чтобы посмотреть, как это было сделано в модеме и эпохе BBS. Возможно, используйте существующий протокол, а не создавайте свой собственный.

Примечание: хотя вы можете использовать QDataStream, для этого необходим надежный канал, поэтому это не так просто, как может показаться на первый взгляд (требуется дополнительная буферизация).

Смежные вопросы