stream_socket_recvfrom
(PHP 5, PHP 7)
stream_socket_recvfrom — Получает данные из сокета, подсоединённого или нет
Описание
$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($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
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Потоки
- set_socket_blocking
- stream_bucket_append
- stream_bucket_make_writeable
- stream_bucket_new
- stream_bucket_prepend
- stream_context_create
- stream_context_get_default
- stream_context_get_options
- stream_context_get_params
- stream_context_set_default
- stream_context_set_option
- stream_context_set_params
- stream_copy_to_stream
- stream_encoding
- stream_filter_append
- stream_filter_prepend
- stream_filter_register
- stream_filter_remove
- stream_get_contents
- stream_get_filters
- stream_get_line
- stream_get_meta_data
- stream_get_transports
- stream_get_wrappers
- stream_is_local
- stream_notification_callback
- stream_register_wrapper
- stream_resolve_include_path
- stream_select
- stream_set_blocking
- stream_set_chunk_size
- stream_set_read_buffer
- stream_set_timeout
- stream_set_write_buffer
- stream_socket_accept
- stream_socket_client
- stream_socket_enable_crypto
- stream_socket_get_name
- stream_socket_pair
- stream_socket_recvfrom
- stream_socket_sendto
- stream_socket_server
- stream_socket_shutdown
- stream_supports_lock
- stream_wrapper_register
- stream_wrapper_restore
- stream_wrapper_unregister
Коментарии
Note that stream_socket_recvfrom() bypasses stream wrappers including TLS/SSL. While reading from an encrypted stream with fread() will return decrypted data, using stream_socket_recvfrom() will give you the original encrypted bytes.
This method may return a peer address not compatible with stream_socket_sendto() if in ipv6.
The ip returned by recvfrom is not within brackets ([]), and has the port appended, which makes it look like ::1:1234. To cut it properly, use strrpos()