Клиент-серверная часть

advertisement
1 Основные функции сервера
Приложение-сервер представляет собой консольную программу. При
запуске сервера можно указать порт для прослушивания входящих
подключений. Сервер работает в многопоточном режиме. Каждый поток
выполняет свою задачу:
1. Основной поток постоянно слушает входящие подключения на
указанном порту. Если клиент пытается подключиться, сервер
автоматически
принимает
его
подключение
и
запускает
(отдельный для каждого клиента) поток общения с ним. При этом
сервер выводит в консоль информацию о подключенном клиенте
(его IP адрес).
2. Поток чтения данных читает с видеоустройства кадры.
3. Поток общения между клиентом и сервером получая команду от
клиента «getnextframe» получает данные у потока чтения кадров и
передает клиенту данные текущего кадра по сети. При старте
данный поток оповещает о том, что начал передавать данные
клиенту выводя соответствующее сообщение в консоль.
Потоки синхронизированы, таким образом исключается возможность
отправки некорректных данных видеокадра конечным клиентам.
Сервер обрабатывает следующие исключительные ситуации:
1. Камера не подключена или отключилась в процессе работы. В
данной исключительной ситуации приложение-сервер выводит
сообщение о данной ошибке в консоль и разрывает все активные
соединения с клиентами.
2. Клиент не отвечает. При наступлении данной исключительной
ситуации сервер корректно завершает поток общения с клиентом и
закрывает установленное между ним и клиентом соединение и,
естественно, оповещает о данном событии выводя в консоль
сообщение о разрыве соединения.
2 Основные функции клиента
Приложение-клиент представляет оконную программу. При запуске
клиента отображается главное окно. Для установления соединения с
сервером предлагается заполнить следующие данные:
1. IP адрес сервера
2. Номер порта
Номер порта заполнен по-умолчанию и соответствует значению номера
порта по-умолчанию в серверном приложении. При нажатии на кнопку “Start
Video Stream” клиент посылает исходящий сигнал на сервер и ждет пока
сервер приймет его подключение. В случае успешного соединения
открывается окно для показа видеоданных и запускается отдельный поток
общения между клиентом и сервером. Поток общения с определенным
промежутком времени посылает серверу команду «getnextframe», после чего
читает ответ в котором содержатся данные текущего видеокадра на сервере.
В любой момент времени можно остановить поток общения (видео поток), нажав кнопку “Stop Video Stream”.
Все потоки приложения-клиента синхронизированы, что обеспечивает
корректное завершение подключений при закрытии программы.
Приложение-клиент обрабатывает корректно обрабатывает следующие
исключительные ситуации:
1. Невозможно подключиться к серверу. Если по указанным
параметрам сервера подключения не принимаются определенное
время, то клиент выдает сообщение об ошибке «Не могу
подключиться к серверу».
2. Сервер не отвечает. Если определенное время сервер не присылает
данные в потоке общения между клиентом и сервером, то данный
поток корректно закрывает установленное соединение, закрывает
окно показа видео и завершается
3 Особенности взаимодействия между сервером и клиентами
При взаимодействии между клиентами и сервером используются
следующие протоколы:
 На
канальном
уровне
модели
OSI
используется
драйвер
устройства и интерфейсная плата.
 На сетевом уровне модели OSI используется протокол IP.
 На транспортном уровне ипользуется протокол UDP. Так как
объемы данных передаваемые сервером конечным клиентам
довольно
велики
и
опасность
потерять
определенную
информацию не критична (в одну секунду сервер отсылает
каждому
клиенту
24
видеокадра),
то
данный
протокол
использовать выгоднее нежели TCP.
 На прикладном уровне модели OSI используется разработанный
автором протокол для передачи видеокадров, описанный в
следующем подразделе.
4 Протокол передачи видеокадров по сети
В данном протоколе различается только один вид запроса: получение
текущего кадра видео. Для осушествления данного запроса клиент посылает
серверу сообщение «getnextframe». В ответ на данный тип запроса сервер
присылает клиенту ответ с следующем формате:
width;height;countChannels;colorDepth;frameData
Где:
 width – целое число, ширина видеокадра в пикселах
 height – целое число, высота видеокадра в пикселах
 countChannels – количество цветовых плоскостей видеокадра
 colorDepth – глубина цвета каждого пиксела видеокадра
 frameData – массив байт изображения снятый построчно с
матрицы видеокадра.
Download