Хелпикс

Главная

Контакты

Случайная статья





«Сложный» 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-сервера:

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.