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.