當前位置: 首頁> 函數類別大全> stream_socket_recvfrom

stream_socket_recvfrom

從連接或非連接的套接字接收數據
名稱:stream_socket_recvfrom
分類:溪流
所屬語言:php
一句話介紹:從套接字接收數據,並返回接收到的數據

函數名稱:stream_socket_recvfrom()

函數描述:stream_socket_recvfrom() 函數從套接字接收數據,並返回接收到的數據。

適用版本:PHP 5 >= 5.3.0, PHP 7

語法:stream_socket_recvfrom ( resource $socket , int $length [, int $flags = 0 [, string &$address ]] ) : string|false

參數:

  • $socket:必需,表示一個打開的套接字資源,可以通過stream_socket_client() 或stream_socket_server() 函數創建。
  • $length:必需,表示要接收的數據的最大長度。
  • $flags:可選,用於指定接收數據時的額外選項。
  • $address:可選,用於存儲發送方的IP 地址和端口號。

返回值:成功時返回接收到的數據,失敗時返回false。

示例:

  1. 接收數據並打印:

$socket = stream_socket_client("udp://127.0.0.1:1234", $errno, $errstr); if (!$socket) { echo "連接失敗:$errstr ($errno)"; } else { $data = stream_socket_recvfrom($socket, 1024); echo "接收到的數據:$data"; fclose($socket); }

  1. 接收數據並獲取發送方的IP 地址和端口號:

$socket = stream_socket_server("udp://127.0.0.1:1234", $errno, $errstr, STREAM_SERVER_BIND); if (!$socket) { echo "啟動服務器失敗:$errstr ($errno)"; } else { $client = stream_socket_accept($socket); $data = stream_socket_recvfrom($client, 1024, 0, $address); echo "接收到的數據:$data"; echo "發送方地址:$address"; fclose($client); fclose($socket); }

注意事項:

  • stream_socket_recvfrom() 函數僅適用於支持流套接字的傳輸協議(如TCP、UDP)。
  • 在使用UDP 協議時,需要在創建套接字時指定"udp://" 協議前綴。
  • 如果指定了$address 參數,則函數會將發送方的IP 地址和端口號存儲在該變量中。
  • $length 參數指定的是要接收的數據的最大長度,如果實際接收到的數據長度超過該值,則只會返回部分數據。
  • $flags 參數可以用於指定接收數據時的選項,常用的選項有MSG_WAITALL(等待直到接收到指定長度的數據)和MSG_DONTWAIT(非阻塞模式)等。
  • 在接收數據之前,需要先創建一個套接字資源,可以使用stream_socket_client() 或stream_socket_server() 函數來創建。
同類函數