====== Repaso DAD 1 ====== Syncronize se utiliza cuando tenemos hilos que comparten objetos para evitar la concurrencia Sockets: canales de comunicación entre 2 o más procesos * Se usa un objeto de la clase socket en cada uno de los procesos que se están comunicando (Uno distinto por programa) * Para mandar datos se usa un flujo de escritura, pero como es tedioso, se utilizan buffers de escritura y buffers de lectura: * PrintWritter: Manda al bufferReader del otro extremo del socket (Para mandar de un proceso a otro) * BufferReader: Recibe lo introducido en el PrintWritter del otro extremo (Para recibir lo enviado por otro proceso) * No se puede escribir en ambos extremos a la vez, tampoco se debe poder leer en los 2 extremos a la vez ya que podemos bloquear el programa (Ambos esperan a que el otro termine de leer) * ServerSocket: Esta clase se utiliza para un socket que quedará a la escucha como servidor, mientras que el otro socket se conectará a este como cliente. ===== Contenido parcial 1 ===== - Preguntas pequeñas de teoría 2 a 3 puntos - Computación distribuida - Hilos - Sockets - Preguntas programación 1 a 2 Puntos - Detectar Fallos en el código - Práctica - Implementar un Cliente y un servidor con Sockets - El profe se va a inventar un protocolo/funcionalidad y hay que ver como se va a programar (Pensar) - Ver que respuesta dan el servidor a un comando de un cliente por sockets (Como el chat pero con Cases) - Server Socket -> While True, lanzo hilo - Si un cliente tiene un listado de algo que guarda en el objeto hilo - Los hilos comparten la información para estar centralizados - Conexión con otros hilos a través del serverSocket constructor{ this.x = x; } run(){ this.x } ===== Sugerencias/consejos del profe ===== * Si pide un protocolo, en el cliente debemos tener como un menú de consola o meter cosas para usar el protocolo y que el cliente mande algo al servidor para que este ejecute lo que tenga que escribir * Construimos el servidor para el protocolo. El Servidor debe tener un Switch para que haga una acción en función a lo que reciba del cliente * El cliente debe ser de base un cliente vacío que tenga un readln y un flush (PW.println()), una secuencia de comandos seguidos, de tal forma que para probar el servidor solo tengamos que ejecutar el cliente (no es necesario meter los comandos manualmente). * Para cada comando o funcionalidad del servidor debemos ejecutar el cliente y meter algo por teclado, para evitar perder tiempo debemos ir metiendo todos los comandos que queramos ejecutar a machete. //Estructura del server en pseudocódigo While True Creamos server socket Acepto conexión Creo Hilo Lanzo Hilo Utilizaremos una implementación similar a la del chat de clase (Multicliente) ===== Para la práctica (Incompleto) ===== public class ClaseAGuardar implements Serializable{ private String campo; public String getCampo(){ return campo; } public String setCampo(String campo){ this.campo = campo; } } public class EscribirEnFichero{ public static void main(String args[]){ FileOutputStream fos = null; ObjectOutputStream oos= null; } }