-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEj2TExSockets.java
More file actions
31 lines (19 loc) · 1.21 KB
/
Ej2TExSockets.java
File metadata and controls
31 lines (19 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Ejercicio 2:
Analiza el siguiente código de un servidor que pretende atender a múltiples clientes a la vez.
¿Funcionará concurrentemente? Es decir, ¿si el Cliente 1 tarda 10 segundos en enviar datos, el Cliente 2 puede
conectarse mientras tanto? Justifica tu respuesta.
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket socket = server.accept();
// Procesamos la petición del cliente
InputStream is = socket.getInputStream();
int data = is.read();
// ... imaginamos un proceso largo que tarda 10 segundos ...
socket.close();
}
---------------------------------------------------------------------------------------------------------------|
SOLUCIÓN:
El código acepta una conexión (server.accept()) y se pone a procesarla inmediatamente en el hilo principal (main).
El bucle while no puede volver a ejecutar server.accept() hasta que termine de procesar al cliente actual y cierre su socket.
Los clientes se atienden en "fila india" (secuencialmente). Si uno tarda, los demás esperan.
Para que sea concurrente, después de accept(), se debe lanzar un Nuevo Hilo (Thread) que maneje ese socket, liberando al main para volver a escuchar.