PHP: Программирование сокетов - Создание клиентских сокетов.

PHP: Программирование сокетов - Создание клиентских сокетов.

Индекс материала
PHP: Программирование сокетов
Создание клиентских сокетов.
Создание серверных сокетов
Одновременная работа с несколькими сокетами
Все страницы

Создание клиентских сокетов.

Создание сокета, готового для подключения к другому сокету в Internet, выполняется с помощью функции socket_connect ():

socket_connect( $socket, $address [, $port] );

    Параметры:

  1. $socket - это сокет, участвующий в соединении;

  2. $address - IP-адрес сервера, к которому нужно подключиться;

  3. $port - необязательный параметр - это порт сервера, к которому необходимо подключиться;

Хотя параметр $port не обязателен в прототипе функции, при подключении доменов AF_INET или AF_INET6 он должен присутствовать. При выполнении эта функция подключается к указанному серверу, используя предоставленный сокет, и возвращает булевское значение, указывающее на то, успешно ли выполнен запрос.

После установки соединения с другим прослушивающим сокетом/сервером - данные могут быть отправлены и приняты через сокет с помощью функций socket_read() и socket_write(). Поскольку вы являетесь клиентом, первый шаг после установки соединения чаще всего заключается в пересылке некоторых данных, поэтому сначала рассмотрим функцию socket_write(), синтаксис которой показан ниже.

socket_write( $socket, $buffer [, $length] );

    Параметры:

  1. $socket — это сокет для записи данных;

  2. $buffer - Данные для записи в сокет;

  3. $length - (необязательный) также может быть указан при желании (в противном случае будет записан весь буфер);

Когда эта функция выполняется, она отправляет содержимое буфера через подключенный сокет и возвращает количество записанных байт, либо булевское значение false в случае возникновения ошибки.

Для чтения данных из сокета применяется функция socket_read{) со следующим синтаксисом:

socket_read($socket, $length [, $type]);

$socket — это сокет, из которого нужно прочитать максимум $length байт. Необязательный параметр $type принимает значения, описанные в таблице ниже, и указывает способ, по которому данные должны читаться из сокета.

Константы типа для socket_read()

Константа Описание
PHP_BINARY_READ Интерпретировать данные как бинарные (поумолчанию).
PHP_NORMAL_READ Читать данные заданной длины, либо пока не встретится символ новой строки (\r или \n).

В листинге ниже представлен пример использования сокетов для извлечения индексной страницы Web-сайта, в него включено все, что рассматривалось выше. Извлечение индексной страницы осуществляется отправкой простого GET-запроса HTTP 1.0 с последующим чтением результата в переменную.

  <?php
  
    $address = 'mail.ru';
    $port = 80;
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    
    socket_connect($socket, $address, $port);
    socket_write($socket, "GET / HTTP/1.0\r\n\r\n");
    
    $result = "";
    
    while($read = socket_read($socket, 1024))
    {
      $result .= $read; 
    }
    socket_close($socket);
    
    echo "Полученный результат:  $result\r\n"; 
    
  ?>

Рассмотрев этот простой пример сокета-клиента, теперь давайте посмотрим на другую сторону соединения - простой сервер на базе сокетов.



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 130 гостей онлайн