Servidor de Preguntas y Respuestas Multihilo

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 2,59 KB

Servidor

El servidor crea un ServerSocket en un puerto específico. Luego, entra en un bucle infinito donde espera conexiones de clientes utilizando servidor.accept(). Cuando se establece una conexión, se crea un nuevo hilo HiloServidor para manejar al cliente y se inicia el hilo.

ServerSocket servidor = new ServerSocket(PUERTO);
while(TRUE) {
  Socket cliente = servidor.accept();
  HiloServidor hilo = new HiloServidor(cliente);
  hilo.start();
}

Hilo

La clase HiloServidor se encarga de la comunicación con un cliente en particular. Lee las preguntas del cliente, obtiene las respuestas correspondientes de un archivo y las envía al cliente.

public class HiloServidor extends Thread {
  BufferedReader fentrada;
  PrintWriter fsalida;
  Socket socket = null;

  public HiloServidor(Socket s) throws IOException {
    socket = s;
    fsalida = new PrintWriter(socket.getOutputStream(), true);
    fentrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  }

  public void run() {
    try {
      File archivo = new File("preguntas.txt");
      FileReader entrada = new FileReader(archivo);
      BufferedReader br = new BufferedReader(entrada);

      String texto;
      while ((texto = br.readLine()) != null) {
        fentrada.readLine(); // Leemos la pregunta del cliente
        fsalida.println(texto); // Enviamos la respuesta
      }

      // Cerramos flujos
      fsalida.close();
      fentrada.close();
      socket.close();
    } catch (IOException e) {
      // Manejo de excepciones
    }
  }
}

Cliente

El cliente se conecta al servidor, envía preguntas y recibe respuestas.

try {
  Socket socket = new Socket(HOST, PUERTO);
  PrintWriter fsalida = new PrintWriter(socket.getOutputStream(), true);
  BufferedReader fentrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  // Enviar pregunta
  fsalida.println("¿Pregunta?");

  // Recibir respuesta
  String respuesta = fentrada.readLine();

  // Mostrar respuesta
  System.out.println(respuesta);

  // Cerrar flujos
  fsalida.close();
  fentrada.close();
  socket.close();
} catch (IOException e) {
  // Manejo de excepciones
}

Conceptos Clave:

  • Sockets: Se utilizan para la comunicación entre procesos, permitiendo la transferencia de datos a través de una red.
  • Multihilo: Permite que el servidor maneje múltiples clientes simultáneamente, mejorando la eficiencia y la capacidad de respuesta.

Entradas relacionadas: