函式名: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() 函式的基本用法,實際使用時可能需要根據具體需求進行適當的修改和錯誤處理。