Otro día mas volvemos a la carga con el curso de PHP. Hoy seguiremos hablando sobre sockets y completaremos la sesión que dejamos a medias la semana pasada. Como siempre, aquí tenéis el índice del curso, por si alguno quiere encontrar un volumen pasado, o por si alguien acaba de empezar a seguir el curso y quiere ponerse al día, lo actualizamos periódicamente. Hoy vamos a empezar recordando el código del cliente-servidor. Podéis leer sobre cómo funciona un socket TCP y UDP y para qué sirve.
Código-Cliente (Básico)
[php]
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock,’192.168.0.23′,’8000′);
socket_write($sock,»Hola»,strlen(«Hola»));
socket_close($sock);
echo «Fin del programa»;
?>
[/php]
Código-Servidor (Básico)
[php]
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock,»192.168.0.18″,»8000″);
socket_listen($sock, 5);
$socket=socket_accept($sock);
$mensaje = socket_read($socket,4,PHP_NORMAL_READ);
?>
[/php]
y ahora vamos a terminar de explicar lo que nos faltaba.
Empezamos por el cliente:
socket_connect (resource socket,int dirección, int puerto);
Como su nombre indica esta función conecta nuestro socket a una dirección remota, usando para ello el puerto que especifiquemos.
La función recibe como argumento el socket que se va a utilizar,una ip y un puerto.
socket_write (resource socket,string buffer, int longitud);
Esta función sirve para “escribir” en el socket, es decir para mandar un “mensaje” al socket remoto con el que está interactuando.
La función recibe el socket sobre el que vamos a escribir, el buffer que almacena el mensaje, y el tamaño del buffer.
socket_close (resource socket);
Cierra un socket, y cancela su conexión.
Recibe el socket que se va a cerrar.
Servidor:
socket_bind (resource socket,int dirección,int puerto);
Vincula un socket con una dirección y un número de puerto.
Recibe el socket, la dirección y el número de puerto.
socket_listen (resource socket,int backlog);
Pone a escuchar conexiones un socket a la dirección y puerto a la que está vinculado.
Recibe el socket que va a ponerse a escuchar y un entero (backlog);
socket_accept (resource $socket);
Acepta una petición de una conexión entrante a socket.
Recibe como argumento un socket previamente creado y vinculado.
Devuelve un socket.
socket_read (resource $socket,int longitud,int tipo)
Lee datos entrantes en un socket.
Recibe el socket que se va a leer, la longitud del mensaje que se va a leer, y como parámetro opcional el tipo de lectura.
Devuelve el flujo de datos leído.
Ya sabemos que hace cada función ahora vamos a ver qué hace el cliente y el servidor cuando se están “ejecutando”.
El cliente crea un socket TCP, que conecta a la IP de servidor, en caso de que este esté escuchando (para lo que el servidor ha debido crear un socket debidamente vinculado, y haberlo puesto a escuchar) la conexión se completará.
Si la conexión se ha completado, el cliente envía un mensaje (hola) y el servidor lo recibe, una vez hecho estos, ambos cierran el socket.
Esto es todo por hoy, la próxima semana volveremos hablando de los errores en sockets y como gestionarlos, por ahora es mejor no empezar con eso en esta sección.