====== 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;
}
}