Chat Con Sockets en Java
Chat Con Sockets en Java
Aplicaciones Distribuidas
Chat con Sockets en Java
https://bitbucket.org/Jenruco/henryperez-mediochat/src/master/ChatSocketsConNick/
¿Cómo usar?
1- Ejecutar el Servidor
2- Ejecutar el primer Cliente e ingresar un “Nick”
Clase Cliente
public class Client {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ClientInterface client = new ClientInterface("Chat - Sockets
Java");
client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Clase Servidor
public class Server {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ServerInterface interfaceServer =
new ServerInterface("Chat - SocketServer Java");
interfaceServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Clase Hilo
public class Hilo extends Thread {
@Override
public void run() {
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(9999);
Dato receivedMessage;
while (true) {
try {
Socket server = serverSocket.accept();
ObjectInputStream objectInputStream = new
ObjectInputStream(server.getInputStream());
try {
receivedMessage = (Dato)
objectInputStream.readObject();
if
(!receivedMessage.getTexto().equals("online")) {
serverInterface.getMenssages().append("\nIp " +
receivedMessage.getIp() + " de "
+ receivedMessage.getNick() + ": "
+ receivedMessage.getTexto());
listaip.add(ipRemota);
ipUser.put(ipRemota,
receivedMessage.getNick());
receivedMessage.setListaIps(listaip);
receivedMessage.setIpUser(ipUser);
receivedMessage.setIp(ipRemota);
for (String s : listaip) {
System.out.println("Array: " + s);
output_envia.writeObject(receivedMessage);
output_envia.close();
enviar_regreso.close();
}
System.out.println("Ip conectada: " +
ipRemota);
}
} catch (ClassNotFoundException ex) {
Henry Pérez García
Aplicaciones Distribuidas
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 nick, ip, texto;
private ArrayList<String> listaIps;
private HashMap<String, String> ipUser;
public Dato() {
}
Clase ClientInterface
class EnvioOnline extends WindowAdapter {
public static String nickpublic="";
@Override
public void windowOpened(WindowEvent e) {
try {
String nombre = JOptionPane.showInputDialog("Nombre: ");
nickpublic=nombre;
Socket misocket = new Socket("192.168.42.6", 9999);
Dato dato = new Dato();
dato.setTexto("online");
dato.setNick(nombre);
ObjectOutputStream objectOutputStream = new
ObjectOutputStream(misocket.getOutputStream());
objectOutputStream.writeObject(dato);
misocket.close();
} catch (IOException ex) {
System.err.println("Fail in WindowOpened " +
ex.getMessage());
}
}
}
addWindowListener(new EnvioOnline());
this.setBounds(80, 35, 320, 410);
this.add(panel);
this.setVisible(true);
this.setTitle(title);
Socket cliente;
try {
serverSocket = new ServerSocket(9090);
//System.out.println("Ya creó el ServerSocket");
Dato datos;
while (true) {
try {
cliente = serverSocket.accept();
Henry Pérez García
Aplicaciones Distribuidas
ObjectInputStream objectInputStream = new
ObjectInputStream(cliente.getInputStream());
try {
datos = (Dato) objectInputStream.readObject();
if (!datos.getTexto().equals("online")) {
txtMessages.append("\n" + datos.getNick()
+ ": " + datos.getTexto());
} else {
if(!nickpublic.equals(ipUser.get(ip)))
cmbIp.addItem(ipUser.get(ip));
ipUserSelect.put(ipUser.get(ip), ip);
}
//lblClient.setText(""+nickpublic+"");
}
} catch (ClassNotFoundException ex) {
ex.getMessage();
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
Clase ServerInterface
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;