stream_socket_recvfrom

(PHP 5)

stream_socket_recvfromBağlı olsun ya da olmasın bir soketten veri alır

Açıklama

string stream_socket_recvfrom ( resource $soket , int $uzunluk [, int $seçenekler = 0 [, string &$adres ]] )

stream_socket_recvfrom() işlevi uzak bir soketten uzunluk baytlık veri alır.

Değiştirgeler

soket

Uzak soket.

uzunluk

soket'tan alınacak bayt sayısı.

seçenekler

seçenekler şunların bir birleşimi olarak belirtilebilir:

seçenekler için olası değerler
STREAM_OOB Band dışı veri alınır.
STREAM_PEEK Veri soketten alınır fakat tampon okunmamış bırakılır. Sonraki fread() veya stream_socket_recvfrom() çağrıları aynı veriyi görür.

adres

Belirtildiği takdirde uzak soketin adresi olarak ele alınır.

Dönen Değerler

Okunan veriyi dizge olarak döndürür.

Örnekler

Örnek 1 - stream_socket_recvfrom() örneği

<?php
/* localhost üzerinde 1234 portuna bir sunucu soketi açalım */
$server stream_socket_server('tcp://127.0.0.1:1234');

/* Bir bağlantı kabul edelim */
$socket stream_socket_accept($server);

/* Band dışı veri olarak bir paket yakalayalım (MTU boyutu 1500 olsun) */
echo "Alınan band dışı veri: '" .
      
stream_socket_recvfrom($socket1500STREAM_OOB) . "'\n";

/* Normal band dışı veriye bir göz atalım ama okunmamış bırakalım */
echo "Veri: '" stream_socket_recvfrom($socket1500STREAM_PEEK) . "'\n";

/* Aynı paketi tekrar alalım ama bu sefer tampondan silelim */
echo "Veri: '" stream_socket_recvfrom($socket1500) . "'\n";

/* Portu kapatalım */
fclose($socket);
fclose($server);
?>

Notlar

Bilginize:

uzunluk bayttan daha uzun bir veri alınırsa, verinin alındığı soketin türüne bağlı olarak (UDP gibi) fazla baytlar iptal edilebilir.

Bilginize:

Sokete dayalı akımlar üzerindeki stream_socket_recvfrom() çağrıları, tamponlu akım işlevlerinden (fread() veya stream_get_line() gibi) sonra, veriyi soketten akım tamponunu devreden çıkararak doğrudan doğruya okur.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 2 notes

up
2
cweiske at php dot net
4 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.
up
0
MagicalTux at php dot net
3 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()
To Top