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";
?>
Рассмотрев этот простой пример сокета-клиента, теперь давайте посмотрим на другую сторону соединения - простой сервер на базе сокетов.
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.
PHP: Программирование сокетов - Создание клиентских сокетов.
