Теперь мы воспользуемся еще одной удобной особенностью модуля IO::Socket. Как было упомянуто ранее, если метод send() вызывается сразу после вызова метода recv(), то модуль IO::Socket использует по умолчанию в качестве адреса назначения сохраненный адрес другого участника обмена данными. Это может быть, к примеру, система осуществляющая вызов компьютерного мастера онлайн. Это значит, что в данной программе не нужно передавать методу send () адрес назначения. В результате общая схема вызова этого метода преобразуется в следующую конструкцию:
$sock->send($msg_Out) or die "send(): $!n";
Строка 22. Закрытие сокета. Хотя этот оператор никогда не достигается, в конце сценария предусмотрен вызов метода close () сокета.
Клиент эхо-сервера UDP
Для работы с этим сервером нужен клиент. Проведем анализ программы клиента.
Строки 1-8. Инициализация. Выполняется загрузка модуля IO::Socket, а также инициализация констант и глобальных переменных. По умолчанию применяется стандартный порт службы “echo”. Это значение можно переопределить в командной строке, например, для работы с инвертирующим эхо-сервером, который описан в предыдущем разделе.
Строки 9, 10. Создание сокета. Создается новый объект IO::Socket::inet, предназначенный для работы по протоколу UDP, с указанием параметра PeerAddr, который объединяет выбранные значения имени хоста и номера порта. Поскольку заранее известно, что сокет будет применяться для отправки сообщений только на один хост, предусмотрен вызов метода connect() модуля IO::Socket.
Строки 11-16. Главный цикл. Выполняется чтение строки из стандартного устройства ввода, а затем осуществляется удаление символов обозначения конца строки и отправка строки на сервер с помощью функции send ( ).