在线文档教程
PHP
流 | Streams

stream_socket_recvfrom

stream_socket_recvfrom

(PHP 5, PHP 7)

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值可以是以下任意组合:

STREAM_OOB处理OOB(带外)数据。
STREAM_PEEK从套接字中检索数据,但不消耗缓冲区。随后调用fread()或stream_socket_recvfrom()将看到相同的数据。

address

如果address提供,它将填充远程套接字的地址。

返回值

以字符串形式返回读取的数据

示例

示例#1 stream_socket_recvfrom()示例

<?php /* Open a server socket to port 1234 on localhost */ $server = stream_socket_server('tcp://127.0.0.1:1234' /* Accept a connection */ $socket = stream_socket_accept($server /* Grab a packet (1500 is a typical MTU size) of OOB data */ echo "Received Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n"; /* Take a peek at the normal in-band data, but don't comsume it. */ echo "Data: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n"; /* Get the exact same packet again, but remove it from the buffer this time. */ echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n"; /* Close it up */ fclose($socket fclose($server ?>

注意

注意:如果收到的消息比length参数长,则可能会丢弃超出的字节,具体取决于收到消息的套接字的类型(如UDP)。

注意:在调用基于缓冲区的流函数(如fread()或stream_get_line())之后,基于套接字的流调用stream_socket_recvfrom()直接从套接字读取数据并绕过流缓冲区。

另请参阅

  • stream_socket_sendto() - 将消息发送到套接字,无论它是否连接

  • stream_socket_client() - 打开Internet或Unix域套接字连接

  • stream_socket_server() - 创建一个Internet或Unix域服务器套接字

← stream_socket_pair

stream_socket_sendto →