Pull to refresh

Сетевой планшетный сканер

Reading time4 min
Views5.3K
Добрый день, уважаемый хаброчитатель!

Этот топик — отголоски прошлого.
Дело было в далеком 2006 году. Надо было написать курсовую работу по «сетям», причем задание надо было придумать самому, главное, чтобы в курсовой была программа использующая клиент-серверную архитектуру. Не знаю кто укусил меня и за какое место, но я предложил программу получения картинок с сетевого планшетного сканера. Другими словами стоят рядом два компьютера и у них один сканер на двоих. Я предполагаю, что сейчас уже полно подобного рода реализаций как программных так и аппаратных, но эта работа делалась давно и мне захотелось поделиться этой разработкой с вами, уважаемые хабропользователи.



Идея заключалась в следующем:


Сервер, который должен был работать с TWAIN драйвером, получать список установленных драйверов и возможные настройки, сканировать изображение и отдавать по сети клиенту.
Клиент, который мог от сервера получить список сканеров, задать настройки для сканера и в итоге получить картинку.

К сожалению времени на разработку было очень мало и разобраться с драйвером TWAIN как полагается так и не получилось и быстро нашлась замена в виде shareware консольной программы, которая просто сканировала и сохраняла картинку в назначенную папку, и поскольку программа платная, она вставляла свой текст в отсканированную картинку, что-то вроде Demo Version. Для курсовой работы это было вполне приемлемо, кроме того делалось это в последнюю ночь перед сдачей этой работы и было уже все равно.

Разрабатывать все это я взялся на Qt3 под windows. Был разработан сервер и клиент, кроме того был использован эмулятор TWAIN сканера, чтобы каждый раз не ждать реальный сканер, пока он отсканирует, виртуальный же сразу отдавал картинку. Протокол общения был разработан самым простым образом 1 байт размер пакета, затем байт типа пакета и потом дополнительная информация (необязательная).
Вот нашел свой отчет (ссылка для скачки на ifolder) по этому курсовому, а вот выписка из него:

Описание протокола взаимодействия клиента и сервера.


3.1.1 Протокол основан на следующей структуре: Первый бит любого сообщения это размер пакета, за исключением пакета, содержащего картинку, при передачи картинки размер составляет 2 байта. Минимальный размер пакета 2 байта. После первого байта – размера следует управляющий символ: для клиента от 0 до 3, для сервера от 0 до 7. При передачи картинки после управляющего символа идет число long с размером самой картинки, и следом сама картинка.
3.1.2 Управляющие символы для клиента:
3.1.2.1 0 — Последняя операция на сервере выполнена успешно;
2.1.2.2 1 — Произошла ошибка на сервере, после чего идет размер строки в один байт и после сама строка с описанием ошибки;
3.1.2.3 2 – Получен список драйверов TWAIN, после чего идет байт количества драйверов, а затем размер строки с названием первого драйвера после чего сама строка, потом снова размер и строка, столько раз, сколько драйверов получено от сервера.
3.1.2.4 3 – Получена картинка, затем long с размером картинки и сама картинка.
3.1.3 Управляющие символы для сервера.
3.1.3.1 0 – Сброс настроек.
3.1.3.2 1 – приветствие, затем идет 1 байт с номером версии клиента, если версия не совпадает с версией сервера, соединение закрывается.
3.1.3.3 2 – Запрос на список драйверов TWAIN, при получении такого запроса, сервер отсылает клиенту список драйверов TWAIN (в данной версии эта функция не доступна).
3.1.3.4 3 – Выбор драйвера по умолчанию.
3.1.3.5 4 — Получен драйвер для работы, после чего идет 1 байт размера строки, затем строка с названием драйвера.
3.1.3.6 5 – Тип картинки для сканирования, после чего идет 1 байт с размером строки, затем строка с типом картинки.
3.1.3.7 6 – Начало сканирования, сервер начинает сканирование, после чего отсылает картинку клиенту.
3.1.3.8 7 – Установка разрешения картинки, после чего идет 2 байта (int) с расширением картинки.

Сервер:


Сервер не имеет графического интерфейса пользователя. Сервер ждет подключения клиента в фоновом режиме, после чего принимает настройки и отсылает ответы о выполнении этих настроек. Затем ждет от клиента запроса на сканирование. Клиент также может сразу отослать запрос на сканирование, в таком случае все настройки будут по умолчанию. При получении команды сканирования, сервер запускает утилиту командной строки для сканирования изображения, сохраняя его в файл page001.jpg или в другом, выбранном формате, после чего передает его по сети на компьютер клиента.

Клиент:


image
Пользователю предлагается ввести настройки клиента. Изначально введены настройки по умолчанию. В графе имя сервера или IP адрес нужно ввести имя компьютера или его IP адрес, где запущен сервер сканирования.
В графе выбор драйвера, можно выбрать драйвер или оставить драйвер по умолчанию. (В данной версии программы доступен только драйвер по умолчанию).
Затем можно выбрать настройки получаемой картинки со сканера: разрешение картинки, формат и путь для сохранения на компьютере клиента. Также доступна функция перезаписать файл, если он существует.
При нажатии на кнопку присоединиться, клиент пытается соединиться с сервером, если соединение произошло, становятся доступными функции сканировать и отсоединиться
При нажатии на кнопку выход, завершается программа клиента сканирования.
Текстовое поле предназначено для вывода информации о ходе работы программы.
Кнопка Очистить для очищения текстового поля.
При нажатии на кнопку сканировать, на сервер отсылаются выбранные настройки и команда сканирования. По окончании сканирования, сервер отсылает ответ и картинка отображается на правой части программы, здесь картинка интерфейса с уже полученным результатом от сервера.

Ну и собственно архив со всем этим — загрузить.
Исходный код не стал описывать в самой статье, все есть в архиве.
Всем спасибо за внимание.
Tags:
Hubs:
Total votes 5: ↑3 and ↓2+1
Comments6

Articles