stream_socket_recvfrom
(PHP 5, PHP 7)
stream_socket_recvfrom — Получает данные из сокета, подключённого или нет
Описание
$socket
, int $length
, int $flags
= 0
, string &$address
= ?
) : string
stream_socket_recvfrom() принимает
данные из удалённого сокета размером до length
байт.
Список параметров
-
socket
-
Удалённый сокет.
-
length
-
Количество байт для получения из параметра
socket
. -
flags
-
Значение параметра
flags
может быть любой комбинацией из следующего:Возможные значения для параметра flags
STREAM_OOB
Обрабатывать данные OOB ( out-of-band
).STREAM_PEEK
Получать данные из сокета, но не расходовать буфер. Последующие вызовы функций fread() или stream_socket_recvfrom() получат те же самые данные. -
address
-
Если указан параметр
address
, он будет заполнен адресом удалённого сокета.
Возвращаемые значения
Возвращает прочитанные данные в виде строки
Примеры
Пример #1 Пример использования функции stream_socket_recvfrom()
<?php
/* Открывает серверный сокет на 1234-м порту на localhost */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* Принимает соединение */
$socket = stream_socket_accept($server);
/* Получает пакет (обычный размер MTU 1500) OOB-данных */
echo "Получены данные OOB (Out-Of-Band): '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* Получить обычные данные, но не расходовать их. */
echo "Данные: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* Получить тот же самый пакет снова, но в этот раз удалить его из буфера данных. */
echo "Данные: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* Закрыть сокет */
fclose($socket);
fclose($server);
?>
Примечания
Замечание:
Если получено сообщение длиной больше, чем параметр
length
, лишние байты могут быть пропущены в зависимости от типа сокета, из которого получено сообщение (такого, как UDP).
Замечание:
Вызовы функции stream_socket_recvfrom() на потоках, основанных на сокетах, после вызовов потоковых функций, основанных на буферах (таких как fread() или stream_get_line()) читают данные непосредственно из сокета и пропускают потоковый буфер.
Смотрите также
- stream_socket_sendto() - Отправляет сообщение в сокет, независимо от того, подсоединён он или нет
- stream_socket_client() - Открыть соединение с интернет-сокетом или с доменным сокетом Unix
- stream_socket_server() - Создаёт интернет-сокет или доменный сокет Unix