Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

Henry Pérez García CHAT

8vo – Ingeniería en Sistemas


Aplicaciones Distribuidas

Clase Cliente
public class Client {

public static void main(String[] args) {


ClientInterface client = new ClientInterface("Chat - Sockets
Java");
client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Clase Servidor
public class Server {

public static void main(String[] args) {


ServerInterface interfaceServer =
new ServerInterface("Chat - SocketServer Java");
interfaceServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Clase Hilo
public class Hilo extends Thread
{
private ServerInterface serverInterface;

public Hilo(String name, ServerInterface serverInterfaz){


super(name);
this.serverInterface = serverInterfaz;
start();
}

@Override
public void run() {
ServerSocket serverSocket;
Socket server;
try {
serverSocket = new ServerSocket(9999);

Dato receivedMessage;
while (true)
{
try{
server = serverSocket.accept();
ObjectInputStream objectInputStream = new
ObjectInputStream(server.getInputStream());
try {
receivedMessage = (Dato)
objectInputStream.readObject();
serverInterface.getMenssages().append("\nIp "
+ receivedMessage.getIp()+ " de "
+ receivedMessage.getNombre()+ ": " +
receivedMessage.getMensaje());

Socket enviar_regreso=new
Socket(receivedMessage.getIp(),9090);
Henry Pérez García CHAT
8vo – Ingeniería en Sistemas
Aplicaciones Distribuidas
ObjectOutputStream output_envia= new
ObjectOutputStream(enviar_regreso.getOutputStream());
output_envia.writeObject(receivedMessage);
output_envia.close();
enviar_regreso.close();
} catch (ClassNotFoundException ex) {

Logger.getLogger(Hilo.class.getName()).log(Level.SEVERE, null, ex);


}

server.close();
}
catch (IOException ex){
System.out.println (ex.getMessage());
}
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}

Clase Dato
public class Dato implements Serializable{
private String nombre, ip, mensaje;

public Dato(String nick, String ip, String texto) {


this.nombre = nick;
this.ip = ip;
this.mensaje = texto;
}

public Dato() {
}

public String getNombre() {


return nombre;
}

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getIp() {


return ip;
}

public void setIp(String ip) {


this.ip = ip;
}

public String getMensaje() {


return mensaje;
}

public void setMensaje(String mensaje) {


this.mensaje = mensaje;
}
}
Henry Pérez García CHAT
8vo – Ingeniería en Sistemas
Aplicaciones Distribuidas
Clase Interfaz de Cliente
public class ClientInterface extends JFrame implements Runnable{
private final JLabel lblTitle, lblClient, lblIp, lblMessage,
lblMessages;
private final JTextField txtMessage, txtClient, txtIp;
private final JTextArea txtMessages;
private final JButton btnSubmit, btnLimpiar;
private final JPanel panel;

private Socket socketClient;

public ClientInterface(String title){


lblTitle = new JLabel("Chat (Cliente)");
lblClient = new JLabel("Nick: ");
lblIp = new JLabel("Ip chat: ");
lblMessage = new JLabel ("Mensaje: ");
lblMessages = new JLabel ("-Chat:-");

txtMessage = new JTextField (25);


txtMessages = new JTextArea (10, 25);
txtClient = new JTextField (25);
txtIp = new JTextField (25);

btnSubmit = new JButton("Enviar");


btnLimpiar = new JButton("Limpiar");

btnSubmit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
socketClient = new Socket("192.168.42.8", 9999);
try (ObjectOutputStream objectOutputStream = new
ObjectOutputStream(socketClient.getOutputStream())) {
Dato dato = new Dato(txtClient.getText(),
txtIp.getText(),
txtMessage.getText());
txtMessages.append("\n Yo:" +
txtMessage.getText());
objectOutputStream.writeObject(dato);
}
socketClient.close();
} catch (IOException ex) {
txtMessages.setText(txtMessages.getText() + "\n" +
txtMessage.getText() + " - Message not sent.");
System.out.println(ex.getMessage());
}
}
});

panel = new JPanel();


panel.add(lblTitle);
panel.add(lblIp); panel.add(txtIp);
panel.add(lblClient); panel.add(txtClient);
panel.add(lblMessages); panel.add(txtMessages);
panel.add(lblMessage); panel.add(txtMessage);
panel.add(btnSubmit); panel.add(btnLimpiar);
Henry Pérez García CHAT
8vo – Ingeniería en Sistemas
Aplicaciones Distribuidas
this.setBounds(800, 350, 320, 410);
this.add(panel);
this.setVisible(true);
this.setTitle(title);

Thread hilo=new Thread(this);


hilo.start();
}

@Override
public void run() {
ServerSocket serverSocket;
Socket cliente;
try {
serverSocket = new ServerSocket(9090);
//System.out.println("Ya creó el ServerSocket");
Dato datos;
while (true)
{
try{
cliente = serverSocket.accept();
ObjectInputStream objectInputStream = new
ObjectInputStream(cliente.getInputStream());
try {
datos = (Dato) objectInputStream.readObject();
txtMessages.append("\n" + datos.getNombre()+":
"+ datos.getMensaje());

} catch (ClassNotFoundException ex) {


ex.getMessage();
}
}
catch (IOException ex){
System.out.println (ex.getMessage());
}
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}

}
}

Clase Interfaz de Servidor


public final class ServerInterface extends JFrame {
private final JLabel lblTitle, lblMessages; /*, lblMessage*/
//private final JTextField txtClient, txtIp; //txtMessage
private final JTextArea txtMessages;
private final JButton btnLimpiar; //btnSubmit,
private final JPanel panel;
//private final Thread myThread;
private Hilo hilo;

public JTextArea getMenssages(){


return txtMessages;
}

public ServerInterface(String title){


lblTitle = new JLabel("Chat (Servidor)");
lblMessages = new JLabel ("Chat: ");
Henry Pérez García CHAT
8vo – Ingeniería en Sistemas
Aplicaciones Distribuidas
txtMessages = new JTextArea (10, 25);
btnLimpiar = new JButton("Limpiar");
panel = new JPanel();

panel.add(lblTitle);
panel.add(lblMessages); panel.add(txtMessages);
panel.add(btnLimpiar);

this.setBounds(800, 350, 320, 410);


this.add(panel);
this.setVisible(true);
this.setTitle(title);

hilo = new Hilo ("Hilo", this);


hilo.start();
}
}

URL del proyecto-> https://bitbucket.org/Jenruco/henryperez-mediochat/src/master/ChatSocket/

You might also like