<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.stream.inc";
$setup = array (
  'home' => 
  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',
    2 => 'Abre una conexi&oacute;n de socket de Internet o Unix',
  ),
  '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',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.stream-socket-client" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">stream_socket_client</h1>
  <p class="verinfo">(PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">stream_socket_client</span> &mdash; <span class="dc-title">Abre una conexión de socket de Internet o Unix</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.stream-socket-client-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>stream_socket_client</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$address</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter reference">&$error_code</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter reference">&$error_message</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.float.php" class="type float">float</a></span></span> <code class="parameter">$timeout</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$flags</code><span class="initializer"> = <strong><code><a href="stream.constants.php#constant.stream-client-connect">STREAM_CLIENT_CONNECT</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span></span> <code class="parameter">$context</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span><br>): <span class="type"><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="para rdfs-comment">
   Inicia un flujo o una conexión de datagrama con el destino
   <code class="parameter">address</code>. El tipo de socket creado se determina
   por el transporte especificado con el formato URL siguiente:
   <code class="literal">transport://target</code>. Para un socket de Internet,
   (AF_INET) como TCP y UDP, el <code class="literal">objetivo</code>
   de <code class="parameter">address</code> será una dirección IP o un nombre de host.
   Para un socket Unix, el <code class="literal">objetivo</code> debe ser un fichero de
   socket del sistema.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    El flujo se abrirá por omisión en modo bloqueante. Puede pasarse
    a modo no bloqueante utilizando la función
    <span class="function"><a href="function.stream-set-blocking.php" class="function">stream_set_blocking()</a></span>.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.stream-socket-client-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">address</code></dt>
     <dd>
      <p class="para">
       La dirección del socket.
      </p>
     </dd>
    
    
     <dt><code class="parameter">error_code</code></dt>
     <dd>
      <p class="para">
       Contendrá el número del error del sistema si la conexión falla.
      </p>
     </dd>
    
    
     <dt><code class="parameter">error_message</code></dt>
     <dd>
      <p class="para">
       Contendrá el mensaje del error del sistema si la conexión falla.
      </p>
     </dd>
    
    
     <dt><code class="parameter">timeout</code></dt>
     <dd>
      <p class="para">
       Tiempo límite, en segundos, para la llamada al sistema
       <code class="literal">connect()</code>.
       Por omisión, se utiliza <a href="filesystem.configuration.php#ini.default-socket-timeout" class="link">default_socket_timeout</a>.
       <blockquote class="note"><p><strong class="note">Nota</strong>: 
        <span class="simpara">
         Este parámetro solo se aplica para conexiones
         que no son asíncronas.
        </span>
       </p></blockquote>
       <blockquote class="note"><p><strong class="note">Nota</strong>: 
        <p class="para">
         Para definir un tiempo límite al leer/escribir
         datos a través de un socket, utilice la función
         <span class="function"><a href="function.stream-set-timeout.php" class="function">stream_set_timeout()</a></span>, ya que el parámetro
         <code class="parameter">timeout</code> solo se aplica durante la conexión
         al socket.
        </p>
       </p></blockquote>
      </p>
     </dd>
    
    
     <dt><code class="parameter">flags</code></dt>
     <dd>
      <p class="para">
       Campo de bits que puede ser la combinación de cualquier opción
       de conexión. Actualmente, los valores posibles para estas opciones son
       <strong><code><a href="stream.constants.php#constant.stream-client-connect">STREAM_CLIENT_CONNECT</a></code></strong> (por omisión),
       <strong><code><a href="stream.constants.php#constant.stream-client-async-connect">STREAM_CLIENT_ASYNC_CONNECT</a></code></strong> y
       <strong><code><a href="stream.constants.php#constant.stream-client-persistent">STREAM_CLIENT_PERSISTENT</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">context</code></dt>
     <dd>
      <p class="para">
       Un recurso de contexto válido, creado por la función
       <span class="function"><a href="function.stream-context-create.php" class="function">stream_context_create()</a></span>.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.stream-socket-client-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   En caso de éxito, se devuelve un recurso de flujo, que puede ser utilizado
   con otras funciones de ficheros, como
   <span class="function"><a href="function.fgets.php" class="function">fgets()</a></span>, <span class="function"><a href="function.fgetss.php" class="function">fgetss()</a></span>,
   <span class="function"><a href="function.fwrite.php" class="function">fwrite()</a></span>, <span class="function"><a href="function.fclose.php" class="function">fclose()</a></span>, y
   <span class="function"><a href="function.feof.php" class="function">feof()</a></span>, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si ocurre un error.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-function.stream-socket-client-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <p class="para">
   Si la llamada falla, <span class="function"><strong>stream_socket_client()</strong></span> devolverá
   <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> y si los parámetros opcionales <code class="parameter">error_code</code> y
   <code class="parameter">error_message</code> son proporcionados, recibirán el error
   exacto que ocurrió en el sistema durante la llamada a
   <code class="literal">connect()</code>. Si el valor devuelto en
   <code class="parameter">error_code</code> es <code class="literal">0</code> y la función
   ha devuelto <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>, es una indicación de que el error ocurrió
   antes de la llamada a <code class="literal">connect()</code>. Esto es probablemente debido
   a un problema de inicialización del socket. Tenga en cuenta que
   <code class="parameter">error_code</code> y <code class="parameter">error_message</code>
   deben ser pasados por referencia.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.stream-socket-client-changelog">
  <h3 class="title">Historial de cambios</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Versión</th>
      <th>Descripción</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">timeout</code> y <code class="parameter">context</code> ahora pueden ser nulos.
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.stream-socket-client-examples">
  <h3 class="title">Ejemplos</h3>
  <p class="para">
   <div class="example" id="stream-socket-client.example.basic">
    <p><strong>Ejemplo #1 Ejemplo con <span class="function"><strong>stream_socket_client()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_socket_client</span><span style="color: #007700">(</span><span style="color: #DD0000">"tcp://www.example.com:80"</span><span style="color: #007700">, </span><span style="color: #0000BB">$errno</span><span style="color: #007700">, </span><span style="color: #0000BB">$errstr</span><span style="color: #007700">, </span><span style="color: #0000BB">30</span><span style="color: #007700">);<br />if (!</span><span style="color: #0000BB">$fp</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000"> (</span><span style="color: #0000BB">$errno</span><span style="color: #DD0000">)&lt;br /&gt;\n"</span><span style="color: #007700">;<br />} else {<br />    </span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">"GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"</span><span style="color: #007700">);<br />    while (!</span><span style="color: #0000BB">feof</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">)) {<br />        echo </span><span style="color: #0000BB">fgets</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">1024</span><span style="color: #007700">);<br />    }<br />    </span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="stream-socket-client.example.daytime">
    <p><strong>Ejemplo #2 Uso de conexiones UDP</strong></p>
    <div class="example-contents"><p>
     Lee la fecha y hora en un servicio UDP de tipo
     &quot;<code class="literal">daytime</code>&quot; (puerto 13) en su propia máquina:
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">stream_socket_client</span><span style="color: #007700">(</span><span style="color: #DD0000">"udp://127.0.0.1:13"</span><span style="color: #007700">, </span><span style="color: #0000BB">$errno</span><span style="color: #007700">, </span><span style="color: #0000BB">$errstr</span><span style="color: #007700">);<br />if (!</span><span style="color: #0000BB">$fp</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"ERROR: </span><span style="color: #0000BB">$errno</span><span style="color: #DD0000"> - </span><span style="color: #0000BB">$errstr</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />} else {<br />    </span><span style="color: #0000BB">fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">);<br />    echo </span><span style="color: #0000BB">fread</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">, </span><span style="color: #0000BB">26</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.stream-socket-client-notes">
  <h3 class="title">Notas</h3>
  <div class="warning"><strong class="warning">Advertencia</strong>
   <p class="simpara">
    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.
   </p>
  </div>
  <blockquote class="note"><p><strong class="note">Nota</strong>: <span class="simpara">Al especificar direcciones
    IPv6 en formato numérico (ej. <code class="literal">fe80::1</code>) se debe colocar la dirección IP
    entre corchetes. Por ejemplo: <code class="literal">tcp://[fe80::1]:80</code>.
</span></p></blockquote>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    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 <span class="function"><a href="function.stream-get-transports.php" class="function">stream_get_transports()</a></span>.
    Consulte <a href="transports.php" class="xref">Lista de los modos de transporte de sockets disponibles</a> para una lista de transportes nativos.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.stream-socket-client-seealso">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.stream-socket-server.php" class="function" rel="rdfs-seeAlso">stream_socket_server()</a> - Crea un socket de servidor Unix o Internet</span></li>
    <li><span class="function"><a href="function.stream-set-blocking.php" class="function" rel="rdfs-seeAlso">stream_set_blocking()</a> - Configura el modo de bloqueo de un flujo</span></li>
    <li><span class="function"><a href="function.stream-set-timeout.php" class="function" rel="rdfs-seeAlso">stream_set_timeout()</a> - Configura el tiempo de espera de un flujo</span></li>
    <li><span class="function"><a href="function.stream-select.php" class="function" rel="rdfs-seeAlso">stream_select()</a> - Supervisa la modificaci&oacute;n de uno o varios flujos</span></li>
    <li><span class="function"><a href="function.fgets.php" class="function" rel="rdfs-seeAlso">fgets()</a> - Recupera la l&iacute;nea actual a partir de la posici&oacute;n del puntero de archivo</span></li>
    <li><span class="function"><a href="function.fgetss.php" class="function" rel="rdfs-seeAlso">fgetss()</a> - Obtiene un l&iacute;nea desde un puntero a un archivo y elimina las etiquetas HTML</span></li>
    <li><span class="function"><a href="function.fwrite.php" class="function" rel="rdfs-seeAlso">fwrite()</a> - Escribe en un fichero en modo binario</span></li>
    <li><span class="function"><a href="function.fclose.php" class="function" rel="rdfs-seeAlso">fclose()</a> - Cierra un fichero</span></li>
    <li><span class="function"><a href="function.feof.php" class="function" rel="rdfs-seeAlso">feof()</a> - Prueba el final del archivo</span></li>
    <li><a href="ref.curl.php" class="xref">Funciones de cURL</a></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>