Está en la página 1de 13

Actividad Eje 3

Construir una aplicación que aplique las temáticas vistas en el eje 3, sobre hilos y
socket en java

Luis Alejandro Rodriguez Cantillo

Profesor: Yashin Alberto Rueda

Fundación Universitaria del Área Andina

Ingeniería de sistemas – virtual

Modelos de Programación ll – 8187


INTRODUCCION
Los hilos y los sockets son dos conceptos importantes en la programación de redes en Java.
Los hilos se utilizan para crear procesos concurrentes que se ejecutan en paralelo dentro de
un mismo programa, mientras que los sockets permiten la comunicación entre diferentes
procesos a través de una red.
Construir una aplicación en java que permite aplicar el tema de hilos y socket, la apli-
cación consiste en:
Construir un juego en el que se generan números aleatorios a través de hilos por parte del
cliente.
Establecer una comunicación entre el cliente y el servidor para que el servidor adivine los
números generados por el cliente.
Contabilizar los aciertos y desaciertos cuando finalice la aplicación.
Cuando el servidor lleve 3 desaciertos seguidos debe salir un mensaje de “Perdis- te”.
Terminar la aplicación cuando el cliente envíe la palabra “terminar”.
DESARROLLO DE HILOS Y SOCKET
Desarrollo de actividad:
Clase cliente.

Para ejecutar el código, se debe compilar y ejecutar tanto el archivo Servidor.java como el
archivo Cliente.java en diferentes terminales o instancias separadas. Para eso se abre una
terminal, se navega hasta el directorio donde se encuentran los archivos Java que se van a
compilar y ejecutar.

Se compila los archivos Java utilizando el comando javac. Aseguramos de incluir el


nombre de todos los archivos Java que deseas compilar, Servidor.java y Cliente.java,
ejecutamos el siguiente comando:
Esto compilará los archivos Java y generará archivos .class correspondientes para cada
clase.

Una vez compilados los archivos, podemos ejecutarlos en diferentes terminales o instancias
separadas. Se abre una nueva terminal o línea de comandos para cada archivo que se va a
ejecutar, En cada terminal, se navega hasta el directorio donde se encuentran los archivos
.class generados.

Se ejecuta el archivo Java utilizando el comando java, seguido del nombre de la clase
Servidor.java

Para ejecutar el archivo Cliente.class, abre otra terminal y se ejecuta el archivo utilizando el
comando anterior

Cada terminal ejecutará una instancia separada del programa Java.


Es importante tener en cuenta que los archivos Java deben compilarse nuevamente si se
realizan cambios en el código fuente. Además, nos aseguramos de que los programas
Servidor y Cliente estén en ejecución simultáneamente para que puedan comunicarse
correctamente a través de los sockets.

Procedemos a probar la aplicación:


Prueba 1. números al azar entre 1&10

Prueba 2. números al azar entre 1&10


Prueba 3. números al azar entre 1&100
Se anexa código escrito del programa:
Servidor.java
package clases;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Servidor {


private static final int PUERTO = 12345;
private static final int NUMERO_MAXIMO = 100;

private ServerSocket serverSocket;


private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;

private int desaciertosSeguidos;

public void iniciar() {


try {
serverSocket = new ServerSocket(PUERTO);
System.out.println("Servidor iniciado. Esperando conexiones...");

clientSocket = serverSocket.accept();
System.out.println("Cliente conectado.");

out = new PrintWriter(clientSocket.getOutputStream(), true);


in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

desaciertosSeguidos = 0;
String mensaje;

while ((mensaje = in.readLine()) != null) {


if (mensaje.equalsIgnoreCase("terminar")) {
break;
}

int numeroCliente = Integer.parseInt(mensaje);


int numeroServidor = generarNumeroAleatorio();
System.out.println("Cliente: " + numeroCliente);
System.out.println("Servidor: " + numeroServidor);

if (numeroCliente == numeroServidor) {
out.println("Acierto");
desaciertosSeguidos = 0;
} else {
out.println("Desacierto");
desaciertosSeguidos++;

if (desaciertosSeguidos == 3) {
System.out.println("Perdiste");
break;
}
}
}

System.out.println("Juego terminado.");

out.close();
in.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
}
}

private int generarNumeroAleatorio() {


Random random = new Random();
return random.nextInt(NUMERO_MAXIMO) + 1;
}

public static void main(String[] args) {


Servidor servidor = new Servidor();
servidor.iniciar();
}
}
Cliente.java
package clases;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Cliente {


private static final String SERVIDOR_IP = "localhost";
private static final int PUERTO = 12345;

private Socket socket;


private PrintWriter out;
private BufferedReader in;
private Scanner scanner;

public void iniciar() {


try {
socket = new Socket(SERVIDOR_IP, PUERTO);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
scanner = new Scanner(System.in);

System.out.println("Conectado al servidor.");

while (true) {
System.out.print("Ingrese un numero (o 'terminar' para salir): ");
String mensaje = scanner.nextLine();
out.println(mensaje);

if (mensaje.equalsIgnoreCase("terminar")) {
break;
}

String respuesta = in.readLine();


System.out.println("Respuesta del servidor: " + respuesta);
}

System.out.println("Juego terminado.");

out.close();
in.close();
socket.close();
scanner.close();
} catch (IOException e) {
}
}

public static void main(String[] args) {


Cliente cliente = new Cliente();
cliente.iniciar();
}
}
CONCLUCIONES
En conclusión, el desarrollo de hilos y sockets en Java es fundamental para la programación
de aplicaciones de red. Los hilos permiten realizar tareas simultáneas dentro de una misma
aplicación, mientras que los sockets permiten la comunicación entre diferentes procesos a
través de una red.
El uso de hilos y sockets en Java permite la creación de aplicaciones robustas y eficientes,
que pueden manejar múltiples conexiones y procesos en forma concurrente. Además, los
métodos y clases ofrecidos por Java para el desarrollo de hilos y sockets permiten
implementar soluciones escalables y eficientes a problemas complejos de redes.
El juego de adivinanza implementado con hilos y sockets en Java ofrece una experiencia
interactiva y desafiante. A través de la comunicación entre el cliente y el servidor, se
generan números aleatorios y se realizan intentos de adivinarlos. Los aciertos y desaciertos
se contabilizan, y cuando el servidor acumula tres desaciertos seguidos, el juego finaliza.
Este juego muestra cómo los hilos y los sockets pueden utilizarse para construir
aplicaciones distribuidas y concurrentes. Además, destaca la importancia de la
comunicación eficiente y la sincronización de datos en un entorno de múltiples hilos.
Al jugar al juego de adivinanza, se promueve el desarrollo de habilidades de programación,
lógica y razonamiento, mientras se disfruta de una experiencia interactiva y entretenida.
REFERENCIAS BIBLIOGRAFICAS
1. "Programación de sockets en Java" de Javier García de Jalón de la Fuente: Este
libro es una guía práctica y detallada sobre la programación de sockets en Java, con
ejemplos de código y explicaciones paso a paso.
2. "Hilos en Java: Programación concurrente" de Ramón Darío Noriega: Este libro es
una introducción detallada a la programación concurrente en Java, con un enfoque
en el uso de hilos y la sincronización.
3. "Programación en Java con Hilos" de Luis Joyanes Aguilar: Este libro es una
introducción a la programación de hilos en Java, con explicaciones de conceptos
básicos y ejemplos de código.
4. https://areandina.instructure.com/courses/35486
5. https://www.youtube.com/watch?v=qXhc4wbDaqU
6. https://www.youtube.com/watch?v=L0Y6hawPB-E

También podría gustarte