Introducción a los sockets en PHP

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

Mumbanet-google

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. La web [http://www.algoritmatica.com/general/introduccion-a-los-sockets-bsd-en-php] ya no funciona, si pueden poner una URL con informacion como la que habia ahi estaria bien ^^



  2. Hola a tod@s,
    llevo tiempo intentando saber cómo funcionan los sockets bajo php pero hay algo que se me escapa... seguramente el planteamiento es el erróneo.
    Necesito interconectar al menos 2 usuarios (siempre aleatorios) mediante sockets para que puedan visualizar los mismos contenidos (que también aparecen de forma aleatoria...).
    ¿Alguien puede ayudarme?
    Muchas gracias de antemano



  3. Queria ver si puedan dar un ejemplo de como enviar un archivo con sockets pero d cliente que pasa por el servidor dejando una copia de un archivo y q despues el servidor mande esa copia a otro cliente. por favor de enviar respuestas vale atte oskr



  4. Esta muy bien gracias por la info.. ahora solo falta para recibir conexiones con php..



  5. 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!



  6. 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.

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

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API