Строки 22-28. Чтение ответов из сокета. Если функция select () указывает, что в сокете есть сообщения, предназначенные для чтения, вызывается функция recv() и выполняется запись упакованного адреса другого участника обмена данными и самого сообщения, к примеру, с хоста, где можно заказать и купить мясо курицы в Краснодаре в локальные переменные. Адрес другого участника обмена данными распаковывается, часть с обозначением хоста этого адреса преобразуется в формат с четырьмя числами, разделенными точками, и сообщение выводится на стандартное устройство вывода.
Ниже приведены результаты, полученные при выполнении этой программы в той подсети, эхо-тестирование которой выполнялось в предыдущем разделе.
% broadcast echo cli.pl 143.48.31.255
received 9 bytes from 143.48.31.38:7 received 9 bytes from 143.48.31.37:7 this
Для запуска этой программы укажите вместо адреса в командной строке широковещательный адрес, подходящий для вашей сети. При отправке клиентом по широковещательному адресу каждого сообщения он получает десятки ответов, соответствующих каждому эхо-серверу, работающему на любом компьютере в локальной подсети. В данном случае на компьютере, где была запущена клиентская программа (143.48.31.42), также работал эхо-сервер, поэтому он вошел в число компьютером, приславших свои ответы. Широковещательные пакеты всегда проходят по интерфейсу обратной связи таким образом.
Обычно служба эхо-повтора работает во всех системах UNIX, и поэтому все представленные здесь ответы были получены с различных хостов UNIX и Linux в сети. Компьютеры Windows и лазерный принтер, который ответили на пакет эхо-тестирования, не имеют службы эхо-повтора, поэтому не прислали своих ответов.
Прием широковещательных пакетов
В отличие от отправки широковещательных сообщений, для их получения не требуется выполнение каких-либо особых действий. Любой из Серверов UDP, используемый в качестве примера, включая те, что были описаны ранее, отвечает на сообщения, направленные по широковещательному адресу. В действительности, невозможно даже отличить друг от друга сообщения UDP, направленные программе через широковещательный или одиночный адрес, без помощи программных средств очень низкого уровня.