Escolar Documentos
Profissional Documentos
Cultura Documentos
Procesamiento Distribuido
Proyecto ServidorChat
Clase: ConexionCliente
package servidorchat;
import
import
import
import
import
import
import
java.io.DataInputStream;
java.io.DataOutputStream;
java.io.IOException;
java.net.Socket;
java.util.Observable;
java.util.Observer;
org.apache.log4j.Logger;
Practica 03
Procesamiento Distribuido
Practica 03
Procesamiento Distribuido
Clase ServidorChat
package servidorchat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
Practica 03
Procesamiento Distribuido
Proyecto: ClienteChat
Clase: ClienteChat
package clientechat;
import
import
import
import
import
import
import
import
import
import
import
java.awt.Container;
java.awt.GridBagConstraints;
java.awt.GridBagLayout;
java.awt.Insets;
java.io.DataInputStream;
java.io.IOException;
java.net.Socket;
java.net.UnknownHostException;
javax.swing.*;
org.apache.log4j.Logger;
org.apache.log4j.PropertyConfigurator;
Practica 03
Procesamiento Distribuido
c.add(tfMensaje, gbc);
// Restaura valores por defecto
gbc.weightx = 0;
gbc.gridx = 1;
gbc.gridy = 1;
c.add(btEnviar, gbc);
this.setBounds(400, 100, 400, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Ventana de configuracion inicial
VentanaConfiguracion vc = new VentanaConfiguracion(this);
host = vc.getHost();
puerto = vc.getPuerto();
usuario = vc.getUsuario();
log.info("Quieres conectarte a " + host + " en el puerto " + puerto + " con el nombre de ususario: " + usuario + ".");
// Se crea el socket para conectar con el Sevidor del Chat
try {
socket = new Socket(host, puerto);
} catch (UnknownHostException ex) {
log.error("No se ha podido conectar con el servidor (" + ex.getMessage() + ").");
} catch (IOException ex) {
log.error("No se ha podido conectar con el servidor (" + ex.getMessage() + ").");
}
// Accion para el boton enviar
btEnviar.addActionListener(new ConexionServidor(socket, tfMensaje, usuario));
}
/**
* Recibe los mensajes del chat reenviados por el servidor
*/
public void recibirMensajesServidor(){
// Obtiene el flujo de entrada del socket
DataInputStream entradaDatos = null;
String mensaje;
try {
entradaDatos = new DataInputStream(socket.getInputStream());
} catch (IOException ex) {
log.error("Error al crear el stream de entrada: " + ex.getMessage());
} catch (NullPointerException ex) {
log.error("El socket no se creo correctamente. ");
}
// Bucle infinito que recibe mensajes del servidor
boolean conectado = true;
while (conectado) {
try {
mensaje = entradaDatos.readUTF();
mensajesChat.append(mensaje + System.lineSeparator());
} catch (IOException ex) {
log.error("Error al leer del stream de entrada: " + ex.getMessage());
conectado = false;
} catch (NullPointerException ex) {
log.error("El socket no se creo correctamente. ");
conectado = false;
}
}
}
/**
Practica 03
Procesamiento Distribuido
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
java.io.DataOutputStream;
java.io.IOException;
java.net.Socket;
javax.swing.JTextField;
org.apache.log4j.Logger;
import
import
import
import
import
import
import
java.awt.Container;
java.awt.GridBagConstraints;
java.awt.GridBagLayout;
java.awt.Insets;
java.awt.event.ActionEvent;
java.awt.event.ActionListener;
javax.swing.*;
Practica 03
Procesamiento Distribuido
import org.apache.log4j.Logger;
public class VentanaConfiguracion extends JDialog{
private Logger log = Logger.getLogger(VentanaConfiguracion.class);
private JTextField tfUsuario;
private JTextField tfHost;
private JTextField tfPuerto;
/**
* Constructor de la ventana de configuracion inicial
*
* @param padre Ventana padre
*/
public VentanaConfiguracion(JFram e padre) {
super(padre, "Configuracion inicial", true);
JLabel lbUsuario = new JLabel("Usuario:");
JLabel lbHost = new JLabel("Usuario:");
JLabel lbPuerto = new JLabel("Usuario:");
tfUsuario = new JTextField();
tfHost = new JTextField("localhost");
tfPuerto = new JTextField("1234");
JButton btAceptar = new JButton("Aceptar");
btAceptar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
Container c = this.getContentPane();
c.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(20, 20, 0, 20);
gbc.gridx = 0;
gbc.gridy = 0;
c.add(lbUsuario, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
c.add(lbHost, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
c.add(lbPuerto, gbc);
gbc.ipadx = 100;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 0;
c.add(tfUsuario, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
c.add(tfHost, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
c.add(tfPuerto, gbc);
Practica 03
Procesamiento Distribuido
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.insets = new Insets(20, 20, 20, 20);
c.add(btAceptar, gbc);
this.pack(); // Le da a la ventana el minimo tamao posible
this.setLocation(450, 200); // Posicion de la ventana
this.setResizable(false); // Evita que se pueda estirar la ventana
this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); // Deshabilita el boton de cierre de la ventana
this.setVisible(true);
}