(PHP 5, PHP 7, PHP 8)
stream_socket_client — Abre una conexión de socket de Internet o Unix
$address
,&$error_code
= null
,&$error_message
= null
,$timeout
= null
,$flags
= STREAM_CLIENT_CONNECT
,$context
= null
Inicia un flujo o una conexión de datagrama con el destino
address
. El tipo de socket creado se determina
por el transporte especificado con el formato URL siguiente:
transport://target
. Para un socket de Internet,
(AF_INET) como TCP y UDP, el objetivo
de address
será una dirección IP o un nombre de host.
Para un socket Unix, el objetivo
debe ser un fichero de
socket del sistema.
Nota:
El flujo se abrirá por omisión en modo bloqueante. Puede pasarse a modo no bloqueante utilizando la función stream_set_blocking().
address
La dirección del socket.
error_code
Contendrá el número del error del sistema si la conexión falla.
error_message
Contendrá el mensaje del error del sistema si la conexión falla.
timeout
Tiempo límite, en segundos, para la llamada al sistema
connect()
.
Por omisión, se utiliza default_socket_timeout.
Nota: Este parámetro solo se aplica para conexiones que no son asíncronas.
Nota:
Para definir un tiempo límite al leer/escribir datos a través de un socket, utilice la función stream_set_timeout(), ya que el parámetro
timeout
solo se aplica durante la conexión al socket.
flags
Campo de bits que puede ser la combinación de cualquier opción
de conexión. Actualmente, los valores posibles para estas opciones son
STREAM_CLIENT_CONNECT
(por omisión),
STREAM_CLIENT_ASYNC_CONNECT
y
STREAM_CLIENT_PERSISTENT
.
context
Un recurso de contexto válido, creado por la función stream_context_create().
En caso de éxito, se devuelve un recurso de flujo, que puede ser utilizado
con otras funciones de ficheros, como
fgets(), fgetss(),
fwrite(), fclose(), y
feof(), false
si ocurre un error.
Si la llamada falla, stream_socket_client() devolverá
false
y si los parámetros opcionales error_code
y
error_message
son proporcionados, recibirán el error
exacto que ocurrió en el sistema durante la llamada a
connect()
. Si el valor devuelto en
error_code
es 0
y la función
ha devuelto false
, es una indicación de que el error ocurrió
antes de la llamada a connect()
. Esto es probablemente debido
a un problema de inicialización del socket. Tenga en cuenta que
error_code
y error_message
deben ser pasados por referencia.
Versión | Descripción |
---|---|
8.0.0 |
timeout y context ahora pueden ser nulos.
|
Ejemplo #1 Ejemplo con 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 Uso de conexiones UDP
Lee la fecha y hora en un servicio UDP de tipo
"daytime
" (puerto 13) en su propia máquina:
<?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 sockets UDP a veces parecerán abrirse sin error, incluso si el host remoto no es accesible. Este error solo se hará aparente cuando se intente leer o escribir datos con este socket. La razón es que UDP es un protocolo sin conexión, lo que significa que el sistema operativo no tiene que establecer un enlace para el socket, hasta que comience a intercambiar datos.
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:
Según su entorno, los sockets Unix o el tiempo límite pueden no estar disponibles. Una lista de los transportes disponibles en el sistema es accesible mediante stream_get_transports(). Consulte Lista de los modos de transporte de sockets disponibles para una lista de transportes nativos.