函数名:socket_recvmsg()
适用版本:PHP 8.0.0 及以上
用法:socket_recvmsg(resource $socket, SocketMsgFlags &$flags) : SocketMsg
参数:
- $socket:表示一个有效的 socket 资源,用于接收消息。
- &$flags:一个引用参数,用于接收接收消息时的标志位。
返回值:
- 返回一个 SocketMsg 对象,包含接收到的消息的详细信息。
示例:
// 创建一个 TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() 失败: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
// 绑定 socket 到 IP 地址和端口
if (socket_bind($socket, '127.0.0.1', 8080) === false) {
echo "socket_bind() 失败: " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
// 监听连接
if (socket_listen($socket, 5) === false) {
echo "socket_listen() 失败: " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
// 接受客户端连接
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() 失败: " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
// 接收消息
$flags = MSG_WAITALL;
$message = socket_recvmsg($clientSocket, $flags);
if ($message === false) {
echo "socket_recvmsg() 失败: " . socket_strerror(socket_last_error($clientSocket)) . "\n";
exit;
}
// 打印接收到的消息
echo "接收到的消息:\n";
var_dump($message);
// 关闭 socket 连接
socket_close($clientSocket);
socket_close($socket);
说明:
- 在示例中,首先创建了一个 TCP socket,并将其绑定到本地 IP 地址和端口。
- 然后通过 socket_listen() 函数监听连接请求,并通过 socket_accept() 函数接受客户端连接,得到一个新的 socket 资源 $clientSocket。
- 最后,通过调用 socket_recvmsg() 函数接收客户端发送的消息,并将消息存储在 $message 变量中。
- 最后,我们打印出接收到的消息,并关闭 socket 连接。
请注意,此示例仅演示了 socket_recvmsg() 函数的基本用法,实际使用时可能需要根据具体需求进行适当的修改和错误处理。