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:

$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!



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



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



  5. Hola a ,
    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

agregar comentario


Se permiten las etiquetas HTML , y

. 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