(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
$server = stream_socket_server('tcp://127.0.0.1:1234');
$socket = stream_socket_accept($server);
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()) читают данные непосредственно из сокета и пропускают потоковый буфер.