stream_socket_recvfrom
(PHP 5, PHP 7, PHP 8)
stream_socket_recvfrom — 接続されているかどうかにかかわらず、ソケットからのデータを受信する
説明
stream_socket_recvfrom(
resource
int
int
?string
): string|false
resource
$socket
,int
$length
,int
$flags
= 0,?string
&$address
= null
): string|false
stream_socket_recvfrom() は、
リモートソケットから最大 length
バイトのデータを
受け取ります。
パラメータ
socket
-
リモートソケット。
length
-
socket
から受信するバイト数。 flags
-
flags
は以下の値の組み合わせです。flags
でとりうる値STREAM_OOB
OOB ( out-of-band
) データを処理します。STREAM_PEEK
ソケットからデータを取得しますが、バッファを消費しません。 fread() あるいは stream_socket_recvfrom() を続けてコールした 際には、同じデータが読み込まれます。 address
-
address
が指定された場合、 そこにはリモートソケットのアドレスが保存されます。
戻り値
読み込んだデータを文字列で返します。
失敗した場合に false
を返します
例
例1 stream_socket_recvfrom() の例
<?php
/* localhost のポート 1234 へのサーバーソケットをオープンします */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* 接続を受け付けます */
$socket = stream_socket_accept($server);
/* OOB データのパケットを取得します(1500 は典型的な MTU のサイズです) */
echo "Received Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* 通常の帯域内のデータを読み込みますが、バッファを消費しません */
echo "Data: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* 同じパケットをもう一度読み込みます。今度はバッファからそれを削除します */
echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* ソケットを閉じます */
fclose($socket);
fclose($server);
?>
注意
注意:
受信したメッセージが
length
パラメータより 長かった場合、ソケットの型によっては(例えば UDP など)超過分の バイトデータが捨てられてしまう可能性があります。
注意:
バッファベースのストリーム関数 (fread() あるいは stream_get_line() など) をコールした後に ソケットベースのストリームで stream_socket_recvfrom() をコールすると、ストリームバッファを経由せず、データをソケットから 直接読み込みます。
参考
- stream_socket_sendto() - 接続されているかどうかにかかわらず、ソケットにデータを送信する
- stream_socket_client() - インターネットドメインまたは Unix ドメインのソケット接続を開く
- stream_socket_server() - インターネットドメインまたは Unix ドメインのサーバーソケットを作成する
+add a note
User Contributed Notes 2 notes
cweiske at php dot net ¶
14 years ago
Note that stream_socket_recvfrom() bypasses stream wrappers including TLS/SSL. While reading from an encrypted stream with fread() will return decrypted data, using stream_socket_recvfrom() will give you the original encrypted bytes.
MagicalTux at php dot net ¶
13 years ago
This method may return a peer address not compatible with stream_socket_sendto() if in ipv6.
The ip returned by recvfrom is not within brackets ([]), and has the port appended, which makes it look like ::1:1234. To cut it properly, use strrpos()
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google