| |||||||||||||||||||||||||||||||||
Атомная энергетика. Ядерные реакторы АЭС. Атомный флот. Ядерное оружие |
|||
| РБМК-1000 | |||
| Гражданский суда | |||
| Авиация | |||
Высшая математика |
|||
| Задачи | |||
| Практикум | |||
| Карта сайта | |||
Открытие соединения через сокет |
РНР не ограничивается взаимодействием с файлами и процессами - вы также можете устанавливать соединения через сокеты. Сокет (socket) представляет собой программную абстракцию, позволяющую устанавливать связь с различными службами другого компьютера. fsockopen( ) Функция fsockopen( ) устанавливает сокетное соединение с сервером в Интернете через протокол TCP или UDP. Синтаксис функции fsockopen( ): int fsockopen (string узел, int порт [, int код_ошибки [, string текст_ошибки [, int тайм-аут]]]) Необязательные параметры код_ошибки и текст_ошибки содержат информацию, которая будет выводиться в случае неудачи при подключении к серверу. Оба параметра должны передаваться по ссылке. Третий необязательный параметр, тайм-аут, задает продолжительность ожидания ответа от сервера (в секундах). В листинге 7.6 продемонстрировано применение функции fsockopen( ) для получения информации о сервере. Однако перед рассмотрением листинга 7.6 необходимо познакомиться еще с одной функцией - socket_set_blocking( ). UDP (User Datagram Protocol) - коммуникационный протокол, не ориентированный на соединение. socket_set_blocking( ) Функция socket_set_b1ocki ng( ) позволяет установить контроль над тайм-аутом для операций с сервером: socket_set_blocking(int манипулятор, boolean режим) Параметр манипулятор задает открытый ранее сокет, а параметр режим выбирает режим, в который переключается сокет (TRUE для блокирующего режима, FALSE для неблокирующего режима). Пример использования функций fsockopen( ) и socket_set_blocking( ) приведен в листинге 7.6. Листинг 7.6. Использование функции fsockopen() для получения информации о сервере <? function getthehost($host.$path) { // Открыть подключение к узлу $fp - fsockopen($host, 80, &$errno, &$errstr, 30); // Перейти в блокирующий режим socket_set_blocking($fp, 1), // Отправить заголовки fputs($fp,"GET $path HTTP/1.1\r\n"); fputs ($fp, "Host: $host\r\n\r\n"); $x = 1; // Получить заголовки while($x < 10) : $headers = fgets ($fp, 4096); print $headers; $x++; endwhile; // Закрыть манипулятор fclose($fp); } getthehost("www. apress.com", "/"); ?> В результате выполнения листинга 7.6 выводится следующий результат: НТТР/1.1 200 OK Server: Microsoft-IIS/4.0 Content-location: http://www.apress.com/0efault.htm Date: Sat. 19 Aug 2000 23:03:25 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed. 19 Jul 2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Content-Length: 1311 pfsockopen( ) Функция pfsockopen( ) представляет собой устойчивую (persistent) версию fsockopen( ). Это означает, что соединение не будет автоматически разорвано по завершении сценария, в котором была вызвана функция. Синтаксис функции pfsockopen( ): int pfsockopen (string узел, int порт [, int код_ошибки [, string текст _ошибки [, int тайм-аут]]]) В зависимости от конкретных целей вашего приложения может оказаться удобнее использовать pfsockopen( ) вместо fsockopen( ). |
| На главную |