Stream 函数
在线手册:中文  英文

stream_socket_recvfrom

(PHP 5)

stream_socket_recvfromReceives data from a socket, connected or not

说明

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

stream_socket_recvfrom() accepts data from a remote socket up to length bytes.

参数

socket

The remote socket.

length

The number of bytes to receive from the socket.

flags

The value of flags can be any combination of the following:

Possible values for flags
STREAM_OOB Process OOB (out-of-band) data.
STREAM_PEEK Retrieve data from the socket, but do not consume the buffer. Subsequent calls to fread() or stream_socket_recvfrom() will see the same data.

address

If address is provided it will be populated with the address of the remote socket.

返回值

Returns the read data, as a string

范例

Example #1 stream_socket_recvfrom() example

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

/* Take a peek at the normal in-band data, but don't comsume it. */
echo "Data: '" stream_socket_recvfrom($socket1500STREAM_PEEK) . "'\n";

/* Get the exact same packet again, but remove it from the buffer this time. */
echo "Data: '" stream_socket_recvfrom($socket1500) . "'\n";

/* Close it up */
fclose($socket);
fclose($server);
?>

注释

Note:

If a message received is longer than the length parameter, excess bytes may be discarded depending on the type of socket the message is received from (such as UDP).

Note:

Calls to stream_socket_recvfrom() on socket-based streams, after calls to buffer-based stream functions (like fread() or stream_get_line()) read data directly from the socket and bypass the stream buffer.

参见


Stream 函数
在线手册:中文  英文

用户评论:

MagicalTux at php dot net (2011-02-15 23:13:34)

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()

cweiske at php dot net (2010-02-28 05:42:43)

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.

易百教程