socket_recvfrom
从套接字接收数据,无论它是否是面向连接的
适用 PHP 版本: PHP 4.0.0 及以上版本
socket_recvfrom 函数用于接收通过套接字发送的消息,并且同时能够获取到发送方的地址信息。它常用于 UDP 套接字编程中,以便在接收到数据包时知道是哪个远程主机发来的。
socket_recvfrom ( resource $socket , string &$buf , int $len , int $flags , string &$address , int &$port )
成功时返回接收到的字节数,失败时返回 FALSE,并且可以通过 socket_last_error() 获取错误代码。
以下是一个使用 socket_recvfrom 函数接收 UDP 数据包并获取发送方信息的示例:
<?php // 创建一个 UDP 套接字 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // 绑定到特定的端口 socket_bind($socket, '0.0.0.0', 9999); // 设置缓冲区和接收参数 $buf = ''; $address = ''; $port = 0; // 接收数据 $bytes = socket_recvfrom($socket, $buf, 1024, 0, $address, $port); if ($bytes === false) { echo "接收失败: " . socket_strerror(socket_last_error($socket)); } else { echo "接收到 $bytes 字节的数据来自 $address:$port\n"; echo "数据内容:$buf\n"; } // 关闭套接字 socket_close($socket); ?>
1. 首先通过 socket_create 函数创建一个 UDP 套接字。
2. 使用 socket_bind 函数将套接字绑定到特定端口(9999)。
3. 调用 socket_recvfrom 函数从套接字接收数据,并将数据存储到 $buf 变量中,同时获取发送方的地址($address)和端口($port)。
4. 如果接收成功,输出接收到的字节数、发送方信息以及接收到的内容;否则,输出错误信息。
5. 最后关闭套接字。