array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'es', ), 'this' => array ( 0 => 'function.stream-socket-client.php', 1 => 'stream_socket_client', ), 'up' => array ( 0 => 'ref.stream.php', 1 => 'Funciones de Flujos', ), 'prev' => array ( 0 => 'function.stream-socket-accept.php', 1 => 'stream_socket_accept', ), 'next' => array ( 0 => 'function.stream-socket-enable-crypto.php', 1 => 'stream_socket_enable_crypto', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'es', 'path' => 'reference/stream/functions/stream-socket-client.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
stream_socket_client — Abrir una conexión de socket de dominio de Internet o Unix
$remote_socket
,&$errno
= ?,&$errstr
= ?,$timeout
= ini_get("default_socket_timeout"),$flags
= STREAM_CLIENT_CONNECT,$context
= ?
Inicia una conexión de flujo o datagrama al destino especificado
por remote_socket
. El tipo de socket creado
se determina por el transporte especificado usando el formato de URL estándar:
transporte://objetivo
. Para sockets de Dominio de Internet
(AF_INET) como TCP y UDP, la porción del objetivo
del parámetro remote_socket
debería consistir en
un nombre de host o dirección IP seguida de dos puntos y un número de puerto. Para sockets
de dominio de Unix, la porción de target
apuntará
al archivo de socket del sistema de archivos.
Nota:
El flujo será abierto por defecto en modo de bloqueo. Se puede cambiar al modo de no bloqueo usando stream_set_blocking().
remote_socket
Dirección del socket al que se va a conectar.
errno
Será establecido al número de error a nivel de sistema si la conexión falla.
errstr
Será establecido al mensaje de error a nivel de sistema si la conexión falla.
timeout
Número de segundos hasta que la llamda al sistema de connect()
debería esperar.
Nota: Este parámetro sólo se aplica cuando no se hace un intento de conexión asíncrona.
Nota:
Para establecer un tiempo de espera para lectura/escritura de información sobre el socket, use la función stream_set_timeout(), ya que
timeout
sólo se aplica mientras se hace una conexión al socket.
flags
Campo de máscara de bits que puede ser establecido a cualquier combinación de banderas de conexión.
Actualmente la selección de banderas de conexión está limitada a
STREAM_CLIENT_CONNECT
(por defecto),
STREAM_CLIENT_ASYNC_CONNECT
y
STREAM_CLIENT_PERSISTENT
.
context
Un recurso de contexto válido creado con stream_context_create().
Si se tuvo éxito, un recurso de flujo es devuelto, el cuál se puede
usar junto con las demás funciones de archivo (tales como
fgets(), fgetss(),
fwrite(), fclose(), y
feof()), false
si falló.
Si falló, los argumentos errno
y
errstr
serán rellenados con el error
a nivel de sistema actual que ocurrió en la llamda a nivel de
sistema de connect()
. Si el valor devuelto en
errno
es 0
y la
función devolvió false
, es una indicación de que el error
ocurrió antes de la llamada a connect()
. Esto es
lo más probable debido a un problema de inicialización del socket. Observe que
los argumentos errno
y
errstr
siempre serán pasados por
referencia.
Ejemplo #1 Ejemplo de stream_socket_client()
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
Ejemplo #2 Usar una conexión UDP
Recuperar el día y la hora desde el servicio "daytime" de UDP (puerto 13) en localhost.
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>
Los sockects UDP a veces parecerán estar abiertos sin un error, incluso si el host remoto es inalcanzable. El error sólo aparecerá cuando se lea o escriba información desde/en el socket. La razón de esto es que UDP es un protocolo no orientado a conexión, lo que significa que el sistema operativo no intenta establecer un enlace para el socket hasta que se necesite enviar o recibir informaicón.
Nota: Cuando se especifique una dirección numérica IPv6 (por ej.,
fe80::1
), la IP debe ser encerrada entre corchetes — por ejemplo,tcp://[fe80::1]:80
.
Nota:
Dependiendo del entorno, pueden no estar disponibles el dominio Unix o el tiempo de espera opcional de la conexión. Una lista de transportes disponibles se puede recuperar unsando stream_get_transports(). Véase Lista de Transportes de Sockets Soportados para una lista de transportes incluidos.