En este vídeo finalizamos la aplicación del chat y la probamos en máquinas virtuales para ver su correcto funcionamiento.

Para más cursos, ejercicios y manuales visita: http://www.pildorasinformaticas.com

source

1 Comentario

  1. Hoola Juan,
    Podrías decirme si vas a empezar un curso de android?
    No sé si son imaginaciones mias o algo pero escuche algo de que harías un curso android.
    Nos ayudaría a todos mucho, ya que los conocimientos que estamos adquiriendo gracias a ti en Java se podrían aplicar allí.
    Muchas gracias por todo y, si tienes la intención, por favor empieza pronto el curso.
    Saludos y muchísimas gracias por todos los videos, nos ayudas muchísimo a todos

  2. Ante todo, muchas gracias por contestar a los pocos comentarios que dejo, y me reitero en lo bueno que es este curso. Tengo una duda sobre estos vídeos en los que hemos creado un chat. En ellos, se cierran los flujos de datos, se cierran los socket, pero no he visto que se hallan cerrado los ServerSocket, no se si alguien lo ha preguntado. ¿Hay algún motivo para ello, que se le halla podido pasar sin querer?, Muchas gracias.

  3. buen dia juan, primero agradecerte por la gran enseñanza que nos aportas, y como segundo lugar me surge una pregunta. Cuando creas el .jar de la clase cliente se encapsula también la clase envioPaquetes, y en la clase servidor hay una instancia de la clase envioPaquetes, entonces si hicieras un .jar de la clase servidor no funcionaria ya que esta instancia de envioPaquetas no esta encapsulada en este .jar de servidor?

  4. me gustaría hacer una consulta… esto es anexo al tema del chat.

    Te comento que he realizado un copiador de archivos con FileChooser (creo que es…), el tema es que copia archivos un poco lento con FileInputStream y FileOutputStream, mi consulta es: si existe otra clase u otra forma de hacer que la copia no sea byte a byte, si no, por un paquete de byte o algo mas rápido???

    Saludos,

  5. Hola aun no pude ver donde esta QUE EL SEVIDOR ENVIE UN MENSAJE a los clientes, Vi el ServerSocket pero tiene que ver un cliente que envie primero y luego recien el servidor envia a otro, Lo que quisiera es que el servidor envie un mensaje y que se muestren en todos los clientes que esteen conectados, algo asi como WEBSOCKET, Lo deseo para lo siguiente: en una aplicacion web JAVA EE creare un usuario y asi crear un SOCKET que envie a otros clientes, el cliente principal sera un APP Android. Lo estaba haciendo con websocket pero android no soporta preo si sporta Sockets Gracias te lo agredecia mucho.

  6. Buenas Juan, podrías poner un mini tutorial de como has configurado las maquinas virtuales? es que me he creado dos maquinas virtuales con Win 7, pero no consigo hacer que se vean mutuamente. Un saludo

  7. amigo eres el amo de JAVA, que gran tutorial, amigo una pregunta, como puedo hacer para que la conversacion me guarde en un archvo .txt?, te agradeceria al 100% * 1 si me podrias ayudar, saludos!

  8. Hola Juan estoy haciendo este ejercicio y he visto que se puede enviar y recibir el mensaje sin necesidad de el virtual box todo con la misma ip y con el mismo puerto, nada era un comentario aunque lo suyo es verlo como tu lo haces o con un servidor, pero el caso es que funciona igual, le mando el mensaje al servidor y el me lo reenvía.

  9. en la linea donde reenviamos el paquete del servidor al cliente "paqueteReenvio.writeObject(paqueteRecibido);" me esta marcando este error :
    java.io.NotSerializableException: java.io.ObjectInputStream
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    at Servidor.run(Servidor.java:114)
    at java.lang.Thread.run(Thread.java:745)

    me puedes ayudar?

  10. Gracias por tu sacrificio Juan, pero solo funciona en ambito local verdad?, osea si se lo doy a un amigo de una red diferente, no le funcionara para chatear conmigo verdad? porque llevo como 3 dias intentando XD

  11. Yo tengo un problema, no se si se deba a que no he configurado adecuadamente las máquinas, pero resulta que solo el primer cliente, puede enviar el mensaje, el servidor lo recibe, pero ya de ahi no sale el mensaje y obtengo un error de time out server y el mensaje nunca llega al cliente 2, que podría ser el causante del error , si el codigo está escrito exactamente igual a como lo has estado haciendo en el curso , ya me cansé de configurar y reconfigurar las máquinas usando diferentes protocolos de red y este sigue sin funcionar, la cosa es que hago pings desde una máquina a otra y todo parece funcionar bien pues los pings me dan conexión sin problema, pero al hacerlo desde código, este sigue sin funcionar ….

  12. hola juan, como haría… tengo dos pc en mi casa, la notebook, la de escritorio y la de mi novia… para ingresar los ip, tengo que instalarle el programa eclipse a mi novia, crear el cliente servidor y ahi ingresar su ip y puerto, después en la notebook mía otro cliente y servidor como venia siguiendo tu ejemplo y con la pc de escritorio que la utiliza de servidor crearía el cliente servidor con eclipse y ingresaría ip y puerto?
    como haria ese chat con 3 pc?

  13. hola juan he realizado tal como has explicado pero no me va te envio mis codigos que lo veas package socket2;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import javax.swing.*;

    public class ordenador {

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    MarcoCliente mimarco=new MarcoCliente();

    mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    }

    class MarcoCliente extends JFrame{

    public MarcoCliente(){

    setBounds(600,300,280,350);

    LaminaMarcoCliente milamina=new LaminaMarcoCliente();

    add(milamina);

    setVisible(true);
    setLayout(null);
    }

    }

    class LaminaMarcoCliente extends JPanel implements Runnable{

    public LaminaMarcoCliente(){

    name=new JTextField(4);
    add(name);
    ip=new JTextField(6);
    JLabel texto=new JLabel(" chat ");
    add(texto);
    add(ip);
    cuadrochat=new JTextArea(12,20);
    add(cuadrochat);
    campo1=new JTextField(20);
    add(campo1);
    miboton=new JButton("Enviar");
    add(miboton);
    miboton.addActionListener(new enviodatos());

    Thread mihilo=new Thread(this);
    mihilo.start();

    }

    ////////
    private JTextArea cuadrochat;
    private JTextField campo1, name,ip;
    private JLabel texto,lname ,lip;
    private JButton miboton;
    /////
    private class enviodatos implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent arg0) {
    cuadrochat.append(campo1.getText()+ "n");

    try {
    Socket ordenador=new Socket("192.168.0.159",44444);
    paqueteenvio paquete=new paqueteenvio();
    paquete.setIp(ip.getText());
    paquete.setMensaje(campo1.getText());
    paquete.setName(name.getText());
    ObjectOutputStream flujoobjecto=new ObjectOutputStream(ordenador.getOutputStream());
    //DataOutputStream flujosalida= new DataOutputStream(ordenador.getOutputStream());
    //flujosalida.writeUTF(campo1.getText());
    flujoobjecto.writeObject(paquete);
    ordenador.close();
    flujoobjecto.close();

    } catch(UnknownHostException e) {
    e.getStackTrace();
    }
    catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }
    @Override
    public void run() {
    // TODO Auto-generated method stub

    try {
    ServerSocket recibiendodelservidor=new ServerSocket(55555);
    Socket ok;
    paqueteenvio guardado;
    while(true) {
    ok=recibiendodelservidor.accept();
    ObjectInputStream recibiendoServer=new ObjectInputStream(ok.getInputStream());
    guardado=(paqueteenvio) recibiendoServer.readObject();
    cuadrochat.append(guardado.getName() + "n" + guardado.getMensaje()+ "n" + guardado.getIp()+ "n");
    recibiendodelservidor.close();
    recibiendoServer.close();
    ok.close();

    }
    } catch (IOException | ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }
    class paqueteenvio implements Serializable{
    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;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    private String ip,mensaje,name;

  14. servidor
    package socket2;

    import javax.swing.*;

    import java.awt.*;
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class servidor {

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    MarcoServidor mimarco=new MarcoServidor();

    mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
    }

    class MarcoServidor extends JFrame implements Runnable {

    public MarcoServidor(){

    setBounds(1000,300,280,350);

    JPanel milamina= new JPanel();

    milamina.setLayout(new BorderLayout());

    areatexto=new JTextArea();

    milamina.add(areatexto,BorderLayout.CENTER);

    add(milamina);

    setVisible(true);
    Thread hilo=new Thread(this);
    hilo.start();

    }

    private JTextArea areatexto;

    @Override
    public void run() {
    // TODO Auto-generated method stub

    try {
    ServerSocket servidor=new ServerSocket(44444);
    String names,ips,mensajes;
    paqueteenvio paqueterecivido=new paqueteenvio();

    while(true) {
    Socket acepto=servidor.accept();
    //DataInputStream entrada=new DataInputStream(acepto.getInputStream());
    //String cojo=entrada.readUTF();
    ObjectInputStream flujorecibido=new ObjectInputStream(acepto.getInputStream());
    paqueterecivido=(paqueteenvio) flujorecibido.readObject();
    names=paqueterecivido.getName();
    ips=paqueterecivido.getIp();
    mensajes=paqueterecivido.getMensaje();
    areatexto.append(names + "n" + "n"+ ips +"n" + mensajes + "n" );
    Socket reenviopaquete =new Socket(ips,55555);
    ObjectOutputStream flujoreenvio=new ObjectOutputStream(reenviopaquete.getOutputStream());
    flujoreenvio.writeObject(paqueterecivido);
    servidor.close();
    reenviopaquete.close();
    flujoreenvio.close();
    }

    } catch (IOException | ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }

  15. por cierto feliz año nuevo 2018 y te deseo todo los buenos de este mundo
    he estado mirando varia veces los fallos que pudiera haber cometido pero no logro saber de donde esta el fallo
    gracias

  16. Juan, mira hice todo paso a paso en tus anteriores videos y cuando llega el momento de comunicar los chat me lanza un error de tipo java.net.ConnectException: Connection timed out: connect, el servidor lo tengo abierto, y solo entra 1 mensaje, al siguiente mensaje sea del mismo cliente o de otro, me sale ese error, y no lo envia nunca.

    he configurado la red como dice en la descripcion pero tampoco me funciona el programa.

    hace 3 horas que estoy con esto y la verdad que se me agotó la paciencia buscando el error, ya no responde ni en local (osea en la misma pc) ni en las maquinas virtuales.

    Edit: espero tu respuesta ansiosamente y gracias por tantos videos pero aca o me perdi de algun video intermedio o no sé que estoy haciendo mal xd

    Edit2: Solucione el problema, resulta que las maquinas virtuales las habia puesto con ip estaticas que no correspondian a las genericas de red, por lo que me quedaba sin internet y por ende no se comunicaban correctamente, si alguien le sirvio esto que me dejen un coment pls.

  17. He exportado las aplicaciones, las he ejecutado desde ordenadores distintos y no me funciona, y pongo bien el IP. Y si lo pongo todo desde el mismo ordenador si que se pueden comunicar las aplicaciones. Porque me pasa?

Dejar respuesta

Please enter your comment!
Please enter your name here