PHP: Программирование сокетов - Создание клиентских сокетов.
Индекс материала |
---|
PHP: Программирование сокетов |
Создание клиентских сокетов. |
Создание серверных сокетов |
Одновременная работа с несколькими сокетами |
Все страницы |
Создание клиентских сокетов.
Создание сокета, готового для подключения к другому сокету в Internet, выполняется с помощью функции socket_connect ():
socket_connect( $socket, $address [, $port] );
$socket - это сокет, участвующий в соединении;
$address - IP-адрес сервера, к которому нужно подключиться;
$port - необязательный параметр - это порт сервера, к которому необходимо подключиться;
Параметры:
Хотя параметр $port не обязателен в прототипе функции, при подключении доменов AF_INET или AF_INET6 он должен присутствовать. При выполнении эта функция подключается к указанному серверу, используя предоставленный сокет, и возвращает булевское значение, указывающее на то, успешно ли выполнен запрос.
После установки соединения с другим прослушивающим сокетом/сервером - данные могут быть отправлены и приняты через сокет с помощью функций socket_read() и socket_write(). Поскольку вы являетесь клиентом, первый шаг после установки соединения чаще всего заключается в пересылке некоторых данных, поэтому сначала рассмотрим функцию socket_write(), синтаксис которой показан ниже.
socket_write( $socket, $buffer [, $length] );
$socket — это сокет для записи данных;
$buffer - Данные для записи в сокет;
$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"; ?>
Рассмотрев этот простой пример сокета-клиента, теперь давайте посмотрим на другую сторону соединения - простой сервер на базе сокетов.
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.