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 →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com