Получает данные из сокета, подсоединённого или нет


(PHP 5)

stream_socket_recvfromПолучает данные из сокета, подсоединённого или нет

Описание

string stream_socket_recvfrom ( resource $socket , int $length [, int $flags = 0 [, string &$address ]] )

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($socket1500STREAM_OOB) . "'\n";

/* Получить обычные данные, но не расходовать их. */
echo "Данные: '" stream_socket_recvfrom($socket1500STREAM_PEEK) . "'\n";

/* Получить тот же самый пакет снова, но в этот раз удалить его из буфера данных. */
echo "Данные: '" stream_socket_recvfrom($socket1500) . "'\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