Anuncios

Bienvenidos sean a este post, hoy crearemos al cliente que se conecta al server del post anterior.

Anuncios

En el post anterior, vimos como crear a la aplicacion servidora que se encarga unicamente de recibir los comunicaciones entrantes de los clientes. Para ello vimos como establecer un socket, como establecer sus parametros, como unirlos a todos y comenzar a escuchar en ese socket. Para aceptarlo, recibirlo y mostrarlo en la consola. Aqui vamos a realizar algo similar pero en lugar de escuchar sera la encargada de enviar los datos. Pasemos a analizar el siguiente codigo:

cliente.cpp

#include <iostream>
#include <cstring>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>

int main()
{
  int socketCliente = socket(AF_INET, SOCK_STREAM, 0);

  sockaddr_in direcServer;
  direcServer.sin_family = AF_INET;
  direcServer.sin_port = htons(8080);
  direcServer.sin_addr.s_addr = INADDR_ANY;

  connect(socketCliente, (struct sockaddr*) &direcServer,
        sizeof(direcServer));

  const char* mensaje = "Hola, server";
  send(socketCliente, mensaje, strlen(mensaje), 0);

  close(socketCliente);

  return 0;
}
Anuncios

Si vienen del post anterior, notaran que son las mismas librerias para el servidor. La libreria netinet/in.h es la encargada de establecer los valores para el socket, la direccion IP, el puerto y el protocolo. La libreria socket es para crear al socket en si, y la ultima es para acceder a constantes y tipos simbolicos estandar.

Anuncios
Anuncios

Nuevamente repetimos los pasos de creacion del socket del server. Primero creamos el socket del cliente para IPv4, que sea de tipo stream y no datagrama, y el ultimo es para que sea TCP por el tipo anterior. Lo siguiente es crear la direccion del servidor, no del cliente, para establecer a donde nos conectaremos. Como vamos a utilizar el mismo equipo para el cliente y servidor, le pasamos los mismos parametros que el servidor. El primero sera el tipo de direccion IP, IPv4, luego el valor del puerto para conectarnos. La funcion htons es para que el valor establecido se almacenen en el orden correcto en memoria. El ultimo parametro es para establecer la direccion IP para escuchar pero de esta manera permite que cualquier direccion IP del equipo se utilice para esto.

Anuncios
Anuncios

En el servidor usamos a bind para unir al socket con los parametros y esto permitira escuchar en ese socket. Pero en el cliente usamos a connect en lugar de bind, para establecer la conexion con este. Primero pasamos el socket de nuestro cliente, luego pasamos los datos del servidor que establecimos anteriormente y el tamaño en memoria de este. Con nuestra conexion establecida, procedemos a crear un mensaje para enviar. Para ello usamos a la funcion send, el primer argumento es el socket del cliente (recuerden que ya estamos conectados al socket), el siguiente es el mensaje al servidor, y el ultimo parametro es una opcion para manejar su conducta. Para finalmente, cerrar el socket y que no quede desperdigado en memoria una vez finalizado el programa. Pasemos a compilarlo y vamos a probarlo.

Anuncios

Para poder probarlo, si tienen linux o unix, les recomiendo abrir dos terminales y en una ejecuten al servidor para que quede corriendo y en otro ejecutaremos al cliente, veamos como trabaja mediante el siguiente video:

Anuncios

En el video podemos ver como primero ejecutamos al servidor y este queda a la espera del cliente. En la otra ventana ejecutamos el cliente, se cierra este y el servidor nos muestra el mensaje enviado por el cliente. Esto es lo que mencionamos cuando hablamos del diseño. El servidor va a estar a la expectativa de lo que enviamos. En este ejemplo simple, mandamos un mensaje pero de esta forma podemos enviar un archivo. Este lo recibe, lo procesa y lo envia a donde corresponde.

Anuncios

Con esto hemos cubierto de forma muy basica como enviar un dato a traves de la red mediante socket. El envio de la informacion es siempre igual pero la informacion que enviaremos es manipulada por las aplicaciones en si. Por eso, solamente debemos prepararla y el envio no sera muy distinto a lo que vimos anteriormente.

Anuncios

En resumen, hoy hemos visto a la aplicacion cliente, como se compone, las tareas que debe realizar, asi como la conexion al servidor y el envio de la informacion, para finalmente ver como el servidor del post anterior la recibe y la procesa. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50