socket_recvmsg
读取一个消息
PHP 7.0.0 及以上版本
socket_recvmsg 函数用于接收套接字消息。它允许你从一个已连接的套接字中接收数据,并且可以处理传输控制信息。
socket_recvmsg(resource $socket, array &$message, int $flags): int
成功时,返回接收到的字节数;如果出现错误,返回 FALSE。
以下是使用 socket_recvmsg 接收数据的示例代码:
<?php // 创建一个 socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "无法创建套接字: " . socket_strerror(socket_last_error()) . "\n"; exit(); } // 绑定到本地地址并监听 $bind = socket_bind($socket, '127.0.0.1', 8080); if ($bind === false) { echo "绑定失败: " . socket_strerror(socket_last_error()) . "\n"; exit(); } $listen = socket_listen($socket, 5); if ($listen === false) { echo "监听失败: " . socket_strerror(socket_last_error()) . "\n"; exit(); } // 接受连接 $client = socket_accept($socket); if ($client === false) { echo "接受连接失败: " . socket_strerror(socket_last_error()) . "\n"; exit(); } // 使用 socket_recvmsg 接收消息 $message = []; $flags = 0; // 可以设置为 SOCKET_MSG_PEEK 等 $bytes_received = socket_recvmsg($client, $message, $flags); if ($bytes_received === false) { echo "接收消息失败: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "接收到的消息: " . implode('', $message) . "\n"; } // 关闭套接字 socket_close($client); socket_close($socket); ?>
本示例代码展示了如何使用 socket_recvmsg 函数从客户端接收消息。首先,创建一个 TCP 套接字并绑定到本地地址(127.0.0.1:8080)。然后,它会监听传入的连接,接受客户端连接请求。接着,使用 socket_recvmsg 函数接收客户端发送的消息,最后关闭套接字。