Предлагается построить процедуру передачи, используя следующие свойства данных:
Предлагается следующий алгоритм взаимодействия между множеством клиентов и сервером. Этот алгоритм позволяет минимизировать поток дейтаграмм в сети и количество используемых сетевых ресурсов.
Основная идея алгоритма в том, что сервер открывает всего один UDP-сокет, но резервирует область для массива адресов фиксированного1.18 множества клиентов. Номер порта также один и известен клиентам вместе с адресом сервера. Клиенты при старте также открывают у себя по одному сокету.
Исходно массив адресов клиентов очищен. При получении дейтаграммы она анализируется на содержание, и если соответствует стартовой, то из сокета извлекается адрес первого клиента и заносится в первую свободную ячейку адресного массива. Затем этому клиенту посылается дейтаграмма ``шапочки" и начинается передача графических данных - дейтаграмм 2. Данные передаются по мере их поступления от аппаратуры сбора, при этом производятся также попытки чтения дейтаграмм запросов от других клиентов.
Поступление дейтаграммы ``Start" от клиента приводит к добавлению соответствующего адреса в массив адресов, передачи "шапочки" и включению этого клиента в цикл передачи дейтаграмм 2. Получение же сервером дейтаграммы ``Stop" вызывает процедуру обнуления соответствующего адреса клиента в массиве адресов и прекращению передачи данных для него. Поэтому дополнительной обязанностью клиентов является периодическое подтверждение собственной ``жизнеспособности" посылкой стартовых дейтаграмм. Эту процедуру логично связать с заполнением экрана клиента и его очисткой.
Поскольку клиенты могут ``забывать"
посылать завершающие дейтаграммы, сервер принудительно через некоторое
время очищает адресный массив.
Алгоритм работы сервера изображен на рис. 1.4.
Алгоритм работы клиента изображен на рис. 1.5.
Работа клиента начинается с процедуры инициализации графического экрана,
при этом средствами X11 могут создаваться специальные окна, раскрашенные
в соответствии с палитрой и ресурсами рабочей станции.
Затем программа открывает дейтаграммный сокет и посылает запрос на прием
``шапочки" для оформления графических данных. Целесообразно организовать
цикл таких запросов с выдержкой времени. (Обычно достаточно десятка секунд).
После получения дейтаграммы 1 вызывается процедура графического
оформления данных в виде рамочек, атрибутов, шкал, сетки времени и т.п.
Затем программа попадает в цикл ожидания дейтаграмм 2 и разрисовки
отсчетов по полученным данным в реальном времени. По мере заполнения экрана,
а также при выбранном тайм-ауте1.19 на прием данных, программа посылает
стартовый запрос на прием дейтаграмм 1 и перерисовывает оформление
экрана. Такие циклы повторяются до тех пор, пока работу программы не
прервет событие (или сигнал) на ее окончание. Перед выходом из программы
и закрытием сокета производится посылка дейтаграммы "Stop" серверу.