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.
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.
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!
Esta muy bien gracias por la info.. ahora solo falta para recibir conexiones con php..
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
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