| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Интернет технологии :: Perl :: Perl и работа с сокетами
Perl и работа с сокетамиИногда возникает необходимость из программы на перле соединиться с другим
сервером и передать/принять какую-нибудь информацию. Как правило, возникает
необходимость работать с протоколом HTTP, но поняв основные принципы
взаимодействия между двумя серверами и прочитав спецификацию интересующего
протокола, можно написать программу, работающую практически через любой
протокол. Далее мы рассмотрим работу с протоколом HTTP. socket(SOCK, DOMAIN, TYPE, PROTOCOL); Данная функция открывает сокет и привязывает его к указателю SOCK.
getprotobyname('tcp');
Помимо tcp можно использовать udp, ip и т.д. Функция getprotobyname
возвращает название протокола в более удобном для функции socket виде. socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
Когда сокет готов, можно подключаться к конкретному серверу. Для этого нам нужен адрес сервера и порт. Предварительно, необходимо сделать следующее: # Конвертирует имя сервера в бинарную последовательность. $iaddr = inet_aton($host); # Упаковывает все в понятную функции connect последовательность. $paddr = sockaddr_in($port, $iaddr); Теперь все готово и мы можем использовать функцию connect: connect(SOCK, $paddr); После соединения с сервером, мы можем передавать и принимать некоторую информацию. Рассмотрим процесс передачи и приема данных, более подробно, на примере соединения с Web-сервером и получения с него некоторого документа. Для отправки сообщения через сокет служит функция send: send (SOCK, "То что шлем", 0); Вместо 0 может быть один из перечисленных флагов: @data=<SOCK>; После окончания сеанса связи, необходимо закрыть сокет, при этом серверу сообщается что сеанс связи закончен. Для закрытия сокета служит функция close, которой необходимо передать дескриптор сокета. close(SOCK); Ну и на последок пример рабочего кода. Программа соединяется с сервером www.perl.ru и забирает от туда главную страницу. use Socket;
$host="www.perl.ru";
$port="80";
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
send (SOCK, "GET / HTTP/1.0nn", 0);
@data=<SOCK>;
close(SOCK);
print @data;
Если вы попробуете поменять значения переменной $host, то обнаружите, что с
некоторых серверов приходит сообщение об ошибке. Всему причиной HTTP протокол и
настройки Web-серверов. Более подробно о HTTP читайте в статье "HTTP протокол".
А пока о том как с этим бороться. send (SOCK, "GET / HTTP/1.0nHOST:$hostnn", 0); Подставив эту строчку в наш скрипт, мы получим уже более совершенную программу. Так же, некоторые сервера в зависимости от браузера (а вы еще не ощущаете себя им?) показывают разные версии сайтов. Встречается такое крайне редко, но к этому нужно быть готовым. Используйте для них переменную USER-AGENT. Рубрика: Perl
Инструменты Internet Explorer 8 Beta 2 для разработчиков.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 05.09.2008
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Остальные статьи:
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|