(PHP 5, PHP 7, PHP 8)
stream_socket_recvfrom — Получает данные из сокета, подключённого или нет
$socket
,$length
,$flags
= 0,&$address
= null
stream_socket_recvfrom() принимает
данные из удалённого сокета размером до length
байт.
socket
Удалённый сокет.
length
Количество байт для получения из параметра socket
.
flags
Значение параметра flags
может быть любой комбинацией
из следующего:
STREAM_OOB |
Обрабатывать данные OOB (out-of-band ).
|
STREAM_PEEK |
Получать данные из сокета, но не расходовать буфер. Последующие вызовы функций fread() или stream_socket_recvfrom() получат те же самые данные. |
address
Если указан параметр address
, он будет заполнен
адресом удалённого сокета.
Возвращает прочитанные данные в виде строки или false
в случае возникновения ошибки.
Пример #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()) читают данные непосредственно из сокета и пропускают потоковый буфер.