|
|||
«Сложный» UDP-клиент#подключаем Perl #! /usr/bin/perl #подключаем модуль use Socket;
#Определяем переменные: $remote_host = " 127. 0. 0. 1"; $remote_port = 1000;
#Создаёмсокет, где SERVER - имясокета socket(SERVER, PF_INET, SOCK_DGRAM, getprotobyname('udp'));
#строимадресудалённогокомпьютера $internet_addr = inet_aton($remote_host) or die " Could't convert\n"; $paddr = sockaddr_in($remote_port, $internet_addr);
#После подгона стандартов под функцию connect - подключаемся connect(SERVER, $paddr) or die " Couldn't connect\n";
# посылаемприветудалённомусерверу send(SERVER, " Hello mann", $flags) or die " Can't send\n";
#Закрываем сокет close(SERVER);
Комментарий: Здесь, как видишь, отличий совсем немного. Мы поменялитолько параметр SOCK_STREAM на SOCK_DGRAM, и поменялипротоколы. Вот и всё с клиентами, теперь перейдём к серверам.
Создать UDP-сервер и TCP-сервер несколько сложнее, чем клиенты. Впрочем, сейчас ты и сам убедишься. Я решил, что дальшецелесообразней использовать структуру IO:: Socket как наиболеепростую и продуктивную, причём как показывает практика – мытеряем совсем немного производительности, но при желании, я уверен, ты и сам разберешься, как сделать нижеследующиепримеры на сыром уровне.
Так как дальшемы будем работать только с IO:: Socket, то целесообразнорасписать все параметры конструктора New() ( … = IO:: Socket:: INET-> new()), вотони:
PeerAddr – адресудалённогохоста PeerHost - синоним PeerAddr PeerPort – порт, к которому идёт соединение LocalAddr – адрес локального хоста, к которому привязывается сокет LocalHost – синоним LocalAddr Proto – Имя протокола (tcp или udp) Type – тип сокета Listen – Размер очереди входящих соединений для приемного сокета, то есть сколько компьютеров можно поставить в очередь на обработку Reuse – установить опцию SO_REUSEADDR перед привязкой сокета, без этой опции серваку придется ждать несколько минут, чтобы перезапустить сервер программы. Timeout – значение тайм-аута(целое число) MultiHomed – опробовать все адреса на хосте с несколькими сетевыми интерфейсами.
Теперь, наконец, рассмотрим пример TCP-сервера:
|
|||
|