Computación II. Servidor de Batalla Naval. Geronimo Manso.

19
Computación II. Computación II. Servidor de Batalla Servidor de Batalla Naval. Naval. Geronimo Manso. Geronimo Manso.

Transcript of Computación II. Servidor de Batalla Naval. Geronimo Manso.

Page 1: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Computación II.Computación II.Servidor de Batalla Naval.Servidor de Batalla Naval. Geronimo Manso.Geronimo Manso.

Page 2: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Temas a Tratar:Temas a Tratar:

Objetivos.Objetivos. Arquitectura.Arquitectura. Estructura.Estructura. Sockets y detalles.Sockets y detalles. Hilos.Hilos. Semáforos.Semáforos. Programa Servidor.Programa Servidor. Programa Cliente.Programa Cliente. Demo.Demo.

Gerónimo Manso.Gerónimo Manso.

Page 3: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Objetivos:Objetivos:

Aplicación de conceptos tales Aplicación de conceptos tales como:como: Sockets.Sockets. Hilos.Hilos. Semáforos.Semáforos.

Se parte de lo conocido hacia los Se parte de lo conocido hacia los nuevos conceptos, con el fin de nuevos conceptos, con el fin de centrarse en lo aprendido.centrarse en lo aprendido.

Gerónimo Manso.Gerónimo Manso.

Código conocido

Nuevos conceptos

Page 4: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Arquitectura:Arquitectura:

Servidor

Cliente/ServidorCliente/Servidor

Clientes

Page 5: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

El programa servidor esta compuesto por los El programa servidor esta compuesto por los siguientes archivos:siguientes archivos:•Batalla.cBatalla.c•Socket.cSocket.c•Socket_Servidor.cSocket_Servidor.c•Servidor.cServidor.c

Estructura:Estructura:

El programa cliente :El programa cliente :•Batalla.cBatalla.c•Socket.cSocket.c•Socket_Cliente.cSocket_Cliente.c•Cliente.cCliente.c

Page 6: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets:Sockets:

Se podría decir que un socket es un canal de comunicación entre dos programas que corren en dos pc diferentes o también en la misma.

Tipos de sockets:Tipos de sockets:

1.Orientados a conexión: TCP2.No orientados a conexión: UDP

Page 7: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: ServidorSockets: ServidorLos pasos básicos utilizados en el servidor son:

1 – Apertura de un socket: socket(); //Retorna un descriptor.

2 – Asociación del programa con el socket: bind();

3 – Indicar que se comience a atender las conexiones: listen();

4 – Obtener y aceptar las conexiones: accept();

5 – Escritura y lectura de datos: write() y read();

6 – Cierre de conexiones: close();

Page 8: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: ClienteSockets: ClienteLos pasos utilizados en el cliente son:

1 – Apertura de un socket: socket();

2 – Solicitud de conexión: connect();

3 – Escritura y lectura de datos: write() y read(); 4 – Cierre de conexiones: close();

Page 9: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Servidor - DetallesSockets: Servidor - DetallesDescripción de la sunción socket():

Función socket(AF_INET, SOCK_STREAM, 0); //Retorna un descriptor.

Argumentos:Primero:

1. AF_INET (Clientes pueden estar en otros ordenadores).2. AF_UNIX (Cliente corre en el mismo ordenador, aunque es

mas óptimo).Segundo:

1. SOCK_STREAM (Socket orientado a conexión).2. SOCK_DGRAM (Socket no orientado a conexión).

Tercero:Se indica el protocolo a emplear, generalmente se pone 0.

Page 10: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Servidor - DetallesSockets: Servidor - DetallesObtención del número de puerto:

Obtenemos el número de servicio al que se quiere atender, mediante la función getservbyname(); que nos devuelve un puntero a una estructura del tipo servent:

Descripción:struct servent Puerto;Puerto = getservbyname(“Nombre del Servicio”,”Protocolo”);/* Se encuentra en el archivo /etc/services */

En esta estructura lo que nos interesa es el campo puerto:Puerto->s_port;

Page 11: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Servidor - DetallesSockets: Servidor - DetallesDescripción de la función bind():

Antes se debe declarar la siguiente estructura:struct sockaddr_in Direccion;

Completar los siguientes parámetros:Direccion.sin_family = AF_INET; /* Igual que en socket()*/ Direccion.sin_port = Puerto->s_port; /* Nº de puerto*/Direccion.sin_addr.s_addr =INADDR_ANY; /* Direccion del cliente. Cualquiera en este caso*/

La función es:

bind (Descriptor, (struct sockaddr *)&Direccion, sizeof (Direccion));/* retorna -1 si hay error*/

Page 12: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Servidor - DetallesSockets: Servidor - DetallesDescripción de la función: listen(Descriptor, 10):

/*Si hay error retorna -1*/Argumentos:

1. Descriptor del sockets.2. Número máximo de clientes en la cola.

Para atender a los clientes utilizamos accept(): struct sockaddr Cliente; int Descriptor_Cliente; int Longitud_Cliente;Descriptor_Cliente = accept(Descriptor, &Cliente, &Longitud_Cliente);

Argumentos:1. Descriptor del socket abierto;2. Puntero a una estructura sockaddr en la que obtendrá

datos del cliente.3. Puntero a un entero, con la longitud útil del campo

anterior.

Page 13: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Servidor - DetallesSockets: Servidor - Detalles

Descripción de las funciones:

read(Descriptor, Datos, Longitud); write(Descriptor, Datos, Longitud);/*Si hay error retorna -1 y 0 si el socket se ha cerrado o llegado a su fin*/

Aclaración: Estas funciones se suelen utilizar en un lazo ya que pueden retornar sin haber escrito o leído todos los datos.

Finalmente utilizamos close();close(Descriptor_del_socket_a_cerrar);

Page 14: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Sockets: Cliente - DetallesSockets: Cliente - DetallesExplicaré solo las funciones que difieren del servidor.

Explicación de la función conect();

Obtención del IP de servidor:struct hostent *Host; Host = gethostbyname ("Nombre_Servidor");

struct sockaddr_in Direccion; Direccion.sin_family = AF_INET; Direccion.sin_addr.s_addr = ((structin_addr*)(Host->h_addr))->s_addr;

/*INADDR_ANY Pusimos en el server*/Direccion.sin_port = Puerto->s_port;

connect (Descriptor, (struct sockaddr *)&Direccion,sizeof (Direccion)) /* Retorna -1 si hay error*/

Page 15: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Hilos:Hilos:

2 - Creo la función que será ejecutada en el 2 - Creo la función que será ejecutada en el segmento del hilo.segmento del hilo.

void *hilo(void *args){ //El argumento es para pasarle información al hilo

/* CODIGO DEL HILO*/ return NULL;}

3 - Declaro la estructura para crear al hilo:3 - Declaro la estructura para crear al hilo:pthread_t hilo_estruc;

Page 16: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Hilos:Hilos:

4 - Creo el hilo de la siguiente manera:4 - Creo el hilo de la siguiente manera:

pthread_create(&hilo_struc, NULL, &hilo1, NULL);

Argumentos:1.Puntero a la estructura del hilo.2.Atributos del hilo: en este caso atributos default.3.Puntero a la función.4.Para pasarle información al hilo.

Page 17: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Semáforos:Semáforos:

3 - Inicializo el semáforo con:3 - Inicializo el semáforo con:sem_init (&semaforo,0,1);sem_init (&semaforo,0,1);

Puntero a la estructura0 ya que se utilizan hilos

Valor inicial del semáforo

Page 18: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Gerónimo Manso.Gerónimo Manso.

Semáforos:Semáforos:

5 - Utilizo la variable global.5 - Utilizo la variable global.

Page 19: Computación II. Servidor de Batalla Naval. Geronimo Manso.

Computación II.Computación II.

DemoDemo

FinFinGerónimo Manso.Gerónimo Manso.