Если данное время соответствует четному кратному значения period, то создается сообщение о состоянии в виде отметки местного времени, за которым следует косая черта и имя хоста, в следующем формате:
Мon May 29 19:05:15 2000/pesto.cshl.org.
Копия сообщения отправляется в сокет с помощью функции send () по установленному ранее адресу назначения многоадресной рассылки. После передачи сообщения программа приостанавливается на 1 с, а затем снова входит в цикл.
Клиент службы времени с многоадресной рассылкой
Теперь рассмотрим клиентскую программу, которая может принимать сообщения
от этого сервера. Проведем анализ программы.
Строки 1-3. Загрузка модулей. Как и прежде, загружаются модули IO::Socket И IO::Socket:Multicast.
Строки 4, 5. Выборка параметров из командной строки. Из командной строки выбирается номер порта и адрес группы многоадресной рассылки. Если эти параметры не заданы, принимаются значения, предусмотренные по умолчанию в сервере.
Строки 7-10. Настройка сокета. Выполняется настройка сокета, который будет применяться для получения многоадресных сообщений. Создается сокет UDP с использованием метода IO::Socket::Multicast->new, ему передается параметр LocalPort для привязки сокета с помощью функции bind () к требуемому порту. Вновь созданный сокет теперь готов к приему одноадресных, но не многоадресных сообщений, направленных в этот порт. Чтобы разрешить прием сообщений, отправленных по адресу группы, вызывается метод mcast_add() с указанным адресом группы многоадресной рассылки.
Строки 11-16. Главный цикл клиентской программы. Остальная часть клиентской программы представляет собой простой цикл, в котором вызывается функция для получения сообщений, поступающих из сокета. Адрес отправителя распаковывается с помощью функции sockaddr_in (), а затем адрес и тело сообщения выводятся на стандартное устройство вывода.
Для проверки клиента можно вызвать сервер на нескольких компьютерах локальной сети и запустить клиентскую программу на своём настольном компьютере.