函数名称: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() 函数来创建。