Chatmulihilo
Chatmulihilo
Chatmulihilo
Carrera:
Estudiante:
Semestre:
2do Semestre
Docente:
Materia:
2024
https://drive.google.com/drive/folders/13XmFbKb8iR51Umc_1fcjpHWBHkxHspPO
Actividad #9. Desarrollo de una Aplicación de Chat Multihilo
Objetivo:
El objetivo de esta tarea es que los estudiantes apliquen los principios de interfaces
gráficas de usuario (GUIs) y aprendan sobre la introducción a los hilos en Java para
Instrucciones:
• Diseña una interfaz gráfica simple para una aplicación de chat que incluya elementos
como áreas de texto para mensajes, campos de entrada para escribir mensajes y botones
para enviarlos.
Código:
package com.mycompany.tareachat;
import javax.swing.*; // Importa el paquete correcto para Swing
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public Tareachat() {
// Configuración de la ventana principal
setTitle("Tareachat");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Manejo de eventos
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage(); // Enviar mensaje cuando se presiona el botón
}
});
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage(); // Enviar mensaje cuando se presiona Enter en el campo de texto
}
});
• Aprende sobre hilos en Java y los estados y ciclo de vida de los hilos.
• Utiliza clases internas y anónimas según sea necesario para estructurar tu código de
manera eficiente.
La lógica de negocio para una aplicación de chat debe manejar 3 aspectos importantes:
Conexiones de clientes.
Recepción y envío de mensajes.
Sincronización para evitar condiciones de carrera.
package tarea;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public Cliente() {
// Configuración personal de la interfaz gráfica
JFrame frame = new JFrame("Chat de Cliente");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
messageArea = new JTextArea();
messageArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(messageArea);
frame.add(scrollPane, BorderLayout.CENTER);
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
frame.setVisible(true);
// Conexión al servidor
try {
socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
package tarea;
import java.io.*;
import java.net.*;
import java.util.*;
String message;
while ((message = in.readLine()) != null) {
System.out.println("Received: " + message);
broadcastMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
clientHandlers.remove(this);
}
}
Capturas parte 2
Parte 3: Integración de la Concurrencia GUI
• Investiga sobre la concurrencia GUI en aplicaciones de escritorio y cómo garantizar
la sincronización y el acceso seguro a los componentes de la interfaz gráfica.
• Implementa la integración de la concurrencia GUI en tu aplicación de chat para
garantizar que la interfaz de usuario se actualice de manera adecuada mientras los hilos
de comunicación están en ejecución.
}
}
}
package tarea;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public Cliente() {
// Configuración de la interfaz gráfica
JFrame frame = new JFrame("Chat Client");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
});
frame.setVisible(true);
// Conexión al servidor
try {
socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}