Реферат: Клиент TCP

Теперь разберем функцию GetSockName().

sub GetSockName{

my ($nm,$pt) = @_;

return undef unless defined($nm);

return undef unless defined($pt);

return undef unless $nm = gethostbyname($nm);

return sockaddr_in($pt,$nm);

}

Вот такая незамысловатая функция спасает нас от головной боли при идентификации сокета. С помощью функции gethostbyname() мы получаем IP-адрес хоста назначения. Иначе это называется разрешением имени. Функция sockaddr_in() входит в состав модуля Socket. В скалярном контексте sockaddr_in упаковывает номер порта и адрес хоста в структуру SOCKADDR_IN.

Теперь давайте попробуем, что же у нас получилось. Запускаем программу и... Ха-ха-ха. Что, опять зависли? Ну и где же у нас ошибка? Правильно, мы забыли отключить буфферизацию. Данные как бы отправлены, но их слишком мало для заполнения буффера. Поэтому фактически, наши отправленные данные застряли в сокете. А сервер ждет и ждет, когда же клиент заявит о своем желании. Давайте исправим положение и добавим следующий код между строк:

connect(CONN,$sock_name)

or die "Couldn't' connect to $ARGV[0]: $!\n";

select(CONN); $|=1; select(STDOUT);

print CONN "GET $ARGV[1] HTTP/1.0\n";

Вот теперь все должно работать.

Заключение

Наша программа, конечно, не супер-пупер, но на кое-что она все-таки сгодится. Например, если отделить заголовки ответа от, непосредственно, тела ответа, то можно скачивать файлы по HTTP. Давайте так и сделаем.

Как нам известно, ответ сервера состоит из заголовка и тела. При чем, заголовок ответа отделяется от тела двумя переводами строки. Вот и найдем эти два перевода строки:

print CONN "GET $ARGV[1] HTTP/1.0\n";

print CONN "Host: $ARGV[0]\n\n";

my $body = "";

$body .= $_ while <CONN>;

close(CONN);

$body =~ s/^.+?\n\r?\n\r?//s;

print $body;

Теперь мы можем выполнить команду:

[root@avalon scripts]# ./gethttp.pl whirlwind.ru /index.cgi > index.html

для получения HTML-кода индексной страницы нашего сайта.

Ну и все, для начала. У вас уже достаточно навыков для возни с протоколами высокого уровня. Вот и попробуйте поработать с FTP, или SMTP.

К-во Просмотров: 449
Бесплатно скачать Реферат: Клиент TCP