当前位置: 首页> 函数类别大全> socket_recvfrom

socket_recvfrom

从套接字接收数据,无论它是否是面向连接的
名称:socket_recvfrom
分类:套接字Sockets
所属语言:php
一句话介绍:从套接字接收数据,无论它是否是面向连接的

socket_recvfrom 函数

适用 PHP 版本: PHP 4.0.0 及以上版本

函数说明

socket_recvfrom 函数用于接收通过套接字发送的消息,并且同时能够获取到发送方的地址信息。它常用于 UDP 套接字编程中,以便在接收到数据包时知道是哪个远程主机发来的。

函数语法

socket_recvfrom ( resource $socket , string &$buf , int $len , int $flags , string &$address , int &$port )

参数

  • $socket (resource): 需要接收数据的套接字资源,通常是通过 socket_create() 创建的。
  • $buf (string): 用于接收数据的缓冲区,函数将收到的数据写入该变量。
  • $len (int): 接收数据的最大字节数,通常为缓冲区的大小。
  • $flags (int): 一些特定的标志,通常可以是 0。此参数用于设置不同的接收方式,详细设置见 PHP 手册。
  • $address (string): 输出参数,接收发送方的 IP 地址。
  • $port (int): 输出参数,接收发送方的端口号。

返回值

成功时返回接收到的字节数,失败时返回 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. 最后关闭套接字。

同类函数
热门文章