You are on page 1of 6

Hacer un Chat en java (Cliente Servidor) Grafico

El chat (trmino proveniente del ingls


que en espaol equivale a charla), tambin
conocido como cibercharla, designa una
comunicacin escrita realizada de manera
instantnea
mediante
el
uso
de
un software y a travs de Internet entre
dos, tres o ms personas ya sea de manera
pblica
a
travs
de
los
llamados chat'spblicos
(mediante
los
cuales cualquier usuario puede tener
acceso a la conversacin) o privada, en los
que
se
comunican
2
personas
y
actualmente ya es posible que se
comuniquen ms de dos personas a la vez.

En
esta
ocasin
les
mostrare
una
pequea aplicacin en la cual se puede
implementar
un
cliente
Servidor
conSocket, OutputStream, DataOutputStre
am, adems, tambin podrn encontrar un
ejemplo de como utilizar unThread (hilo), y
una
clase
interna
que
implementa
un Runnable.

El mismo solo es una simulacin de como


es que se mandan datos a la red,
aclarando que este programa solo funciona
con
redLAN (local). Tambin podrn observar
aquellos que tienen dudas de como
implementar ActionListener o keyListener,
adems tambin puse una imagen con

el Logode Facebook solo para que se vea


mas bonito.
Este (Cliente Servidor) esta programado
para enviar Datos a la misma PC, solo
para verificacin
canalComunicacion = new Socket(InetAddress.getLocalHost()/*"
192.168.1.66"*/, 10831);

Donde se muestra que la direccin IP esta


comentada y en su lugar se
pone InetAddress.getLocalHost(), ya que
se necesite conecta a otro host solo lo
quitas y pones la direccin IP y listo.
import
import
import
import
import
import
import
import
import
import
import
import
import
import

javax.swing.*;
java.awt.*;
java.awt.event.*;
java.io.DataInputStream;
java.io.DataOutputStream;
java.io.IOException;
java.io.InputStream;
java.io.OutputStream;
java.net.InetAddress;
java.net.ServerSocket;
java.net.Socket;
java.net.UnknownHostException;
java.util.logging.Level;
java.util.logging.Logger;

public final class Chat extends JFrame implements


ActionListener,KeyListener{
private JPanel panelBotones = new JPanel();
private JPanel panelContenedor = new JPanel(new BorderLayout(1, 2));
private JLabel labelTitulo;
private JTextField textoChat = new JTextField("");
private JTextArea label = new JTextArea("");
private JButton botonEnviar = new JButton("Enviar");
private ImageIcon imagen = new ImageIcon(getClass()
.getResource("facebook.jpg"));
public String area = "";
private boolean metalera = false;
public Chat(){
titulo();
setBounds(250,100,357,500);
setTitle("Chat");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
mensajeEntrada entrada = new mensajeEntrada();

Thread t =
t.start();

new Thread(entrada);

}
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource().equals(botonEnviar)){
if(textoChat.getText().equals(""))
metalera = false;
else
metalera = true;
if(metalera)
mensageSalida();
textoChat.setText("");
}
}
@Override
public Image getIconImage() {
Image iconoVentana = Toolkit.getDefaultToolkit().
getImage(ClassLoader.getSystemResource("icono.png"));
return iconoVentana;
}
public void titulo(){
labelTitulo = new JLabel();
labelTitulo.setIcon(imagen);add(labelTitulo,BorderLayout.NORTH);
panelContenedor.add(textoChat,BorderLayout.CENTER);
add(new JScrollPane(label), BorderLayout.CENTER);
panelBotones.setBackground(java.awt.Color.BLUE);
panelBotones.setLayout(new BorderLayout());
panelBotones.add(botonEnviar,BorderLayout.EAST);
panelContenedor.add(panelBotones,java.awt.BorderLayout.SOUTH);
botonEnviar.addActionListener(this);
add(panelContenedor,java.awt.BorderLayout.SOUTH);
label.setEditable(false);
label.setFont(new Font("Tahoma", 3, 12));
setIconImage(getIconImage());
textoChat.addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
if(textoChat.getText().equals(""))
metalera = false;
else
metalera = true;
if(metalera)
mensageSalida();
textoChat.setText("");
}
}
});
}
@Override
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override

public void keyReleased(KeyEvent e) {


throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void keyPressed(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mensageSalida(){
try {
Socket canalComunicacion = null;
OutputStream bufferSalida;
DataOutputStream datos;
canalComunicacion = new Socket(
InetAddress.getLocalHost()/*"192.168.1.66"*/, 10831);
bufferSalida = canalComunicacion.getOutputStream();
datos = new DataOutputStream(bufferSalida);
label.setText(textoChat.getText());
area += "Paracoccidio dice: \n " + label.getText()+ "\n";
label.setText(area);
datos.writeUTF("Paracoccidio dice: \n " +
textoChat.getText());
datos.writeUTF("");
textoChat.setText("");
datos.close();
bufferSalida.close();
canalComunicacion.close();
} catch (UnknownHostException ex) {
Logger.getLogger(Chat.class.getName()).log(Level.SEVERE,
null, ex);
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName()).log(Level.SEVERE,
null, ex);
}
}
class mensajeEntrada implements Runnable{
@SuppressWarnings("SleepWhileInLoop")
@Override
public void run(){
while(true){
ServerSocket puerto = null;
try {
puerto = new ServerSocket(10831);
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName())
.log(Level.SEVERE, null, ex);
}
while(true){
try {
DataInputStream datos;
InputStream bufferEntrada = null;
Socket canalComunicacion = null;
canalComunicacion = puerto.accept();
bufferEntrada =
canalComunicacion.getInputStream();
datos = new DataInputStream(bufferEntrada);

@SuppressWarnings("RedundantStringConstructorCall")
String cadena = area;
label.setText(datos.readUTF());
area += label.getText() + "\n";
label.setText(area);
datos.close();
bufferEntrada.close();
canalComunicacion.close();
} catch (IOException ex) {
Logger.getLogger(Chat.class.getName())
.log(Level.SEVERE, null, ex);
}
}
}
}
}
}

Ahora solo les dejo el Archivo Main.java y


esta listo para Compilar desde Consola o
Terminal.
import javax.swing.UIManager;
public class Main {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {}
java.awt.EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new Chat().setVisible(true);
}
});
}
}

Con esto solo faltan


las imgenes que eleg yo para
la aplicacin estas ustedes las pueden
cambiar para codificarlo mejor, igual las
dejo aqu abajo.

You might also like