stream_socket_recvfrom()
从套接字接收数据,并返回接收到的数据
函数名称:stream_socket_recvfrom()
函数描述:stream_socket_recvfrom() 函数从套接字接收数据,并返回接收到的数据。
适用版本:PHP 5 >= 5.3.0, PHP 7
语法:stream_socket_recvfrom ( resource $socket , int $length [, int $flags = 0 [, string &$address ]] ) : string|false
参数:
$socket:必需,表示一个打开的套接字资源,可以通过 stream_socket_client() 或 stream_socket_server() 函数创建。
$length:必需,表示要接收的数据的最大长度。
$flags:可选,用于指定接收数据时的额外选项。
$address:可选,用于存储发送方的 IP 地址和端口号。
返回值:成功时返回接收到的数据,失败时返回 false。
示例:
接收数据并打印:
$socket = stream_socket_client("udp://127.0.0.1:1234", $errno, $errstr);
if (!$socket) {
echo "连接失败:$errstr ($errno)";
} else {
$data = stream_socket_recvfrom($socket, 1024);
echo "接收到的数据:$data";
fclose($socket);
}
接收数据并获取发送方的 IP 地址和端口号:
$socket = stream_socket_server("udp://127.0.0.1:1234", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
echo "启动服务器失败:$errstr ($errno)";
} else {
$client = stream_socket_accept($socket);
$data = stream_socket_recvfrom($client, 1024, 0, $address);
echo "接收到的数据:$data";
echo "发送方地址:$address";
fclose($client);
fclose($socket);
}
注意事项:
stream_socket_recvfrom() 函数仅适用于支持流套接字的传输协议(如 TCP、UDP)。
在使用 UDP 协议时,需要在创建套接字时指定 "udp://" 协议前缀。
如果指定了 $address 参数,则函数会将发送方的 IP 地址和端口号存储在该变量中。
$length 参数指定的是要接收的数据的最大长度,如果实际接收到的数据长度超过该值,则只会返回部分数据。
$flags 参数可以用于指定接收数据时的选项,常用的选项有 MSG_WAITALL(等待直到接收到指定长度的数据)和 MSG_DONTWAIT(非阻塞模式)等。
在接收数据之前,需要先创建一个套接字资源,可以使用 stream_socket_client() 或 stream_socket_server() 函数来创建。