函式名:socket_recvfrom()
適用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7
函式說明:socket_recvfrom() 函式從指定的套接字接收資料,並將傳送方的地址和埠儲存在指定的變數中。
語法:int socket_recvfrom ( resource $socket , string &$buf , int $len , int $flags , string &$name [, int &$port ] )
引數說明:
- $socket:必需,指定的套接字資源。
- $buf:必需,用於儲存接收到的資料的變數。
- $len:必需,指定要接收的最大位元組數。
- $flags:可選,指定接收資料的標誌,預設為0。
- $name:必需,用於儲存傳送方地址的變數。
- $port:可選,用於儲存傳送方埠的變數,預設為0。
返回值:成功時返回接收到的位元組數,失敗時返回FALSE。
示例程式碼:
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
echo "socket_create() failed: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
$bind = socket_bind($socket, '0.0.0.0', 8888);
if ($bind === false) {
echo "socket_bind() failed: " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
$buffer = '';
$senderAddress = '';
$senderPort = 0;
// 接收資料並獲取傳送方的地址和埠
$bytes = socket_recvfrom($socket, $buffer, 1024, 0, $senderAddress, $senderPort);
if ($bytes === false) {
echo "socket_recvfrom() failed: " . socket_strerror(socket_last_error($socket)) . "\n";
exit;
}
echo "Received $bytes bytes from $senderAddress:$senderPort\n";
echo "Data: $buffer\n";
socket_close($socket);
以上示例程式碼建立了一個UDP套接字,並繫結到本地的8888埠。然後使用socket_recvfrom()函式接收資料,將傳送方的地址和埠儲存在相應的變數中。最後輸出接收到的資料、傳送方的地址和埠,並關閉套接字。
注意:示例中使用的是UDP套接字,如果需要使用TCP套接字,則需要使用socket_recv()函式來接收資料。