Для поддержки многоадресной рассылки достаточно изменить лишь несколько фрагментов клиентского приложения, поэтому в листинге приведены только соответствующие части исходного кода. Полный исходный код исправленной версии клиента будет приведен в дальнейшем. А теперь рассмотрим клиент системы интерактивной переписки в Internet, в котором применяется многоадресная рассылка. Как уже отмечалось ранее, это может быть любая информация, к примеру, описание Apple iPhone 6s или любого другого мобильного агрегата.
Строки 1-9. Загрузка модулей. Кроме модулей IО::Socket и IO::Select, загружаются модули ChatObjects::MCoiran и IO::Socket::Multicast для получения доступа к методу mcast_add () и подобным методам.
Строки 23-36. Определение обработчиков для событий сервера. Хеш %messages отображает события сервера на подпрограммы, которые вызываются для их обработки. К списку обрабатываемых событий добавляется set_mcast_port, а в качестве обработчика этого события применяется новая подпрограмма create_msocket ().
Строки 37-42. Инициализация управляющего сокета и сокета многоадресной рассылки. Выполняется чтение параметров из командной строки для получения адреса сервера и номера управляющего порта, которые применяются по умолчанию. Затем создается стандартный объект ChatObjects::Comm, содержащий адрес и номер порта одноадресной рассылки сервера. Этот объект сохраняется в переменной $comm. Он будет применяться для обмена сообщениями системы интерактивной переписки с сервером. Для многоадресных сообщений будет затем создан объект ChatObjects::MComm.
Строки 41-54. Регистрация и вход в цикл вызова функции select (). Теперь предпринимается попытка зарегистрироваться на сервере. В случае успешного выполнения создаем объект IO::Select с управляющим сокетом и дескриптором stdin, после чего клиентский сценарий входит в главный цикл для обработки команд пользователя и сообщений сервера. Эта часть программы не отличается от первоначальной версии, но приведена здесь для предоставления контекста.