Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (21 – Протокол TCP, часть 2)

предыдущая часть ««»» следующая часть

Итак программа клиента эхо-сервера tcp_echo_clil.pl приведена ниже. Она также незаменима при программировании сетевых приложений. Вначале рассмотрим все строки этого кода, а затем опишем, что и почему здесь было сделано.

Клиент эхо-сервера TCP

#!/usr/local/bin/perl

# Файл: tcp_echo_clil.pl

# Применение: tcp_echo_clil.pl [хост] [порт]

# Эхо-клиент, версия для TCP use strict;

use Socket; use IO::Handle;

my ($bytes_out,$bytes_in) = (0,0);

my $host = shift || 'localhost';

my $port = shift || getservbyname ('echo', 'tcp') ;

my $protocol = getprotobyname ('tcp');

$host =inet_aton($host) or die "$host: unknown host"; socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "socket() failed: $!";

my $dest_addr = sockaddr_in($port,$host);

connect(SOCK, $dest_addr) or die "connect() failed: $!"; SOCK->autoflush(1);

while (my $msg_out = ) {

 print SOCK $msg_out;

 my $msg_in = ;

 print $msg_in;

 $bytes_out += length($msg_out);

  $bytes_in += length($msg_in);

}

close SOCK;

print STDERR "bytes_sent = $bytes_out, bytes_received = $bytes_inn";

Строки 13,14. Формирование адреса назначения и подключение к нему сокета. Для соз­дания упакованного адреса, содержащего IP-адрес и номер порта назначения, применяется функция sockaddr_in(). Теперь этот адрес используется в качестве адреса назначения в вызове функции connect(). В случае успешного выполнения функция connect() возвра­щает истинное значение. В ином случае вызывается функция die с сообщением об ошибке.

Строка 15. Включение режима автоматического сброса для сокета. Данные, записанные в сокет, должны немедленно сбрасываться из локального буфера, а не накапливаться в нем. Для включения режима автоматического сброса вызывается метод autoflush() сокета. Этот метод становится доступным в результате загрузки модуля IO::Handle.

Строки 16-22. Вход в главный цикл. Теперь программа входит в главный цикл. При каждом проходе по этому циклу выполняется чтение строки текста из стандартного устройства ввода и вывод ее в неизменном виде в сокет sock, т.е. отправка на удаленный хост. Затем осуществляется чтение строки ответа сервера с помощью оператора и вывод ее на стандартное устройство вывода.

При каждом проходе по циклу подсчитывается число отправленных и полученных байтов. Это про­должается до тех пор, пока не будет достигнут конец файла EOF на стандартном устройстве ввода.

Строки 23,24. Закрытие сокета и вывод статистической информации. После завершения цикла сокет закрывается и на стандартное устройство вывода сообщений об ошибках выводятся итоговые статистические данные о числе отправленных и полученных байтов.

Сеанс работы с программой tcp_echo_clil.pl выглядит примерно так:

% tcp_echo_clil.pl

How now brown cow?

How now brown cow?

There’s an echo in here.

There’s an echo in here.

Yo-de-lay-ee-oo!

Yo-de-lay-ee-oo!

^D

bytes_sent = 61, bytes_received = 61

 

Сочетание символов в предпоследней строке распечатки сеанса показывает, где автору надоела эта игра и он нажал комбинацию клавиш конца ввода. (В сис­теме Windows это была бы комбинация клавиш .)



2013-10-21 10:57:43

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2025 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония