Introducción a los sockets en PHP

Escrito por Carla Vázquez el Viernes 15 de Febrero de 2008 a las 16:13hs

La utilización de sockets en PHP (HyperText PreProcessor) brinda una herramienta que habilita la comunicación y permite el intercambio de datos entre dos programas que pueden o no estar situados en diferentes computadoras. Para que esta función sea de hecho posible, el socket, cuenta con tres recursos que lo definen: una dirección IP, un número de puerto y un protocolo.

Estos atributos permiten el reconocimiento de la computadora, la identificación del programa dentro de ella y el intercambio de datos respectivamente.

Los sockets dependerán del protocolo de comunicaciones en el cuál estén basados. Generalmente el protocolo que más se utiliza es el denominado a partir de las siglas TCP (Transmision Control Protocol) aunque no es el único posible. Éste permite, por ejemplo, establecer una relación servidor-cliente y habilitar el traspase de información entre ellos de un modo ordenado.

El servidor permanece pasivo a la espera de que el cliente le solicite conexión. Para establecer esta conexión son necesarios los tres conceptos centrales que mencionamos anteriormente. La dirección de IP del servidor y no así la de los clientes, dado que son aquellos los que solicitan conexión con el servidor y no viceversa, es un número que contienen todas las computadoras conectadas en la red.

La ventaja en el uso de sockets radica en que estos recursos permiten la transferencia de los datos sin lugar a error u omisión y en el mismo orden en el que han sido transmitidos.

Para establecer una conexión a un servidor mediante el uso de los socket con PHP utilizamos la función fsockopen (), seguida del nombre del servidor y el número del puerto. La sintaxis es la siguiente:

$Socket = fsockopen (”algunservidor.ejemplo.com”, 80)

Asimismo, la función fclose() permite cerrar la conexión, y las funciones fgets() y fputs() sacar y pasar información respectivamente.
Presentamos aquí un ejemplo de conexión a un servidor mediante el uso de socket incluyendo la posibilidad del fallo de la conexión y su reanudación:

<?php
$cfgServer    = "algunservidor.ejemplo.com";
$cfgPort    = 80;
$cfgTimeOut    = 10;

// open a socket
if(!$cfgTimeOut)
    // without timeout
    $usenet_handle = fsockopen($cfgServer, $cfgPort);
else
    // with timeout
    $usenet_handle = fsockopen($cfgServer, $cfgPort, &$errno, &$errstr, $cfgTimeOut);
if(!$usenet_handle) {
    echo "Connexion failed ";
    exit();
}   
else {
    echo "Connected ";
    $tmp = fgets($usenet_handle, 1024);
}
?>

Una vez establecida la conexión cliente-servidor se puede comenzar con el intercambio de información. A continuación, se visualizará cómo obtener una respuesta por parte del servidor y aplicar una función para mostrarla:

<?
$conexion = fsockopen (”algunservidor.ejemplo.com”, 80);
if ($conexion) {
echo “Conexion realizada con éxito”;
$respuesta = fgets ($conexion, 100);
echo $respuesta;
fclose ($conexion);
}
?>

El programa cliente cómo se indica en los ejemplos primero procede a establecer conexión con el servidor mediante la función fsockopen(). Una vez realizada esta operación hay que solicitar al servidor que acepte la petición del cliente a conectarse con el mismo a través de la función connect(). En este paso es fundamental la dirección de IP del servidor y del servicio dado que de otro modo no se podrá establecer la conexión deseada. Las funciones gets() y puts() son necesarias para escribir y recibir los datos solicitados al servidor.


comentarios



  1. Muy buen uso de la información y mucho mejor el de transmitirla.... te felicito por la iniciativa, gracias por la aportación, sigue asi.



  2. La información está muy buena :) gracias...
    pero.. para complementar están los sockets BSD (http://www.algoritmatica.com/general/introduccion-a-los-sockets-bsd-en-php)


    Un saludo!

agregar comentario


Se permiten las etiquetas HTML <b>, <i> y <p>. Si ingresa alguna dirección web o dirección de email serán convertidos en enlaces automáticamente.





publicidad