La extensión de sockets implementa una interfaz de bajo
nivel con las funciones de comunicación de sockets,
basadas en los populares sockets BSD, ofreciendo la posibilidad
de actuar como un servidor de sockets, asà como cliente.
Aquellos que no se encuentran familiarizados con
programación de sockets, pueden encontrar una gran
cantidad de material útil en las páginas man de
Unix apropiadas, y existe una enorme cantidad de
información estilo tutorial sobre programación de
sockets en C en la web, mucha de la cual puede aplicarse, con
ligeras modificaciones, a la programación de sockets en
PHP. El FAQ de Sockets Unix
puede ser un buen comienzo.
The socket functions described here are part of an extension to
PHP which must be enabled at compile time by giving the --enable-sockets option to
configure.
Nota: El soporte para IPv6 fue agregado
en PHP 5.0.0 .
Estas constantes están
definidas por esta extensión y estarán disponibles
solamente cuando la extensión ha sido o bien compilada dentro
de PHP o grabada dinámicamente en tiempo de ejecución.
Ejemplo 1. Ejemplo de Socket: Servidor TCP/IP simple
Este ejemplo le muestra un servidor simple que repite de vuelta
su entrada. Modifique las
variables direccion y
puerto para que se acomoden a su
configuración y ejecútelo. Puede entonces
conectarse con el servidor mediante un comando similar
a: telnet 192.168.1.53 10000 (en donde la
dirección y el puerto se ajustan a su
configuración). Cualquier cosa que escriba será
entonces impresa en el lado del servidor, y devuelta a su
lado. Para desconectarse, ingrese 'salir'.
do { if (($mens_sock = socket_accept($sock)) < 0) { echo "socket_accept() falló: motivo " . socket_strerror($mens_sock) . "\n"; break; } /* Enviar instrucciones. */ $mensaje = "\nBienvenido al Servidor de Prueba PHP. \n" . "Para salir, escriba 'salir'. " . "Para detener el servidor, escriba 'detener'.\n"; socket_write($mens_sock, $mensaje, strlen($mensaje));
do { if (false === ($buf = socket_read($mens_sock, 2048, PHP_NORMAL_READ))) { echo "socket_read() falló: motivo: " . socket_strerror($ret) . "\n"; break 2; } if (!$buf = trim($buf)) { continue; } if ($buf == 'salir') { break; } if ($buf == 'detener') { socket_close($mens_sock); break 2; } $respuesta = "PHP: Usted dijo '$buf'.\n"; socket_write($mens_sock, $respuesta, strlen($respuesta)); echo "$buf\n"; } while (true); socket_close($mens_sock); } while (true);
socket_close($sock); ?>
Ejemplo 2. Ejemplo de Socket: Cliente TCP/IP simple
Este ejemplo muestra un cliente HTTP simple, de un
paso. Simplemente se conecta con una página, envia una
petición HEAD, imprime la respuesta, y sale.
<?php error_reporting(E_ALL);
echo "<h2>Conexión TCP/IP</h2>\n";
/* Obtener el puerto para el servicio WWW. */ $puerto_servicio = getservbyname('www', 'tcp');
/* Obtener la direccion IP del host de destino. */ $direccion = gethostbyname('www.example.com');
socket_getpeername --
Queries the remote side of the given socket which may either result in host/port
or in a Unix filesystem path, dependent on its type
socket_getsockname --
Queries the local side of the given socket which may either result in host/port
or in a Unix filesystem path, dependent on its type
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.