Chat en Java con Sockets

Iniciado por Elliot123, 3 Mayo 2018, 03:37 AM

0 Miembros y 1 Visitante están viendo este tema.

Elliot123

Hola buenas, estoy haciendo una aplicacion en java para chat con sockets, pero he tenido un par de inconvenientes, ya probe el cliente y el servidor en la misma maquina y funcionan correctamente, pero tengo un problema al ejecutar la aplicacion en otro ordenador, usando ese ordenador y otro en donde, ejecuto el servidor y un cliente al mismo tiempo y en el otro ejecuto solo el cliente, al enviar mensajes desde el primer pc que mencione los mensajes llegan correctamente y tal pero cuando intento enviar un mensaje desde el ordenador que solo tiene el cliente este me lanza una excepcion del tipo Connect Exception
que aparece de la siguiente forma

java.net.ConnectException : Connection time out : connect

Aca dejare el codigo fuente tanto del cliente como del servidor




Código (java) [Seleccionar]
Cliente
-------------

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       try
       {
           Socket cliente = new Socket("192.168.14.1",9999);
           
           Mensaje mensaje = new Mensaje();
           
           mensaje.setContacto(jContacto.getText());
           
           mensaje.setIp(ip.getText());
           
           mensaje.setTexto(escritura.getText());
           
           ObjectOutputStream flujo_salida = new ObjectOutputStream(cliente.getOutputStream());
           
           flujo_salida.writeObject(mensaje);
           
           cliente.close();
           
           flujo_salida.close();
           
           /*
           DataOutputStream flujo_salida = new DataOutputStream(cliente.getOutputStream());
           
           flujo_salida.writeUTF(jTextArea2.getText());
           
           flujo_salida.close();*/
           
           
       } catch (IOException ex){
           JOptionPane.showMessageDialog(null,ex);
       } catch(Exception e){
           JOptionPane.showMessageDialog(null,e);
       }
   }                                        


Servidor
----------


   public FrmServidor() {
       initComponents();
       
       Thread hilo = new Thread(this);
       
       hilo.start();
   }


   public void run() {
     
       try {
       
         ServerSocket servidor = new ServerSocket(9999);
         
         String contacto,texto,ip;
         
         Mensaje mensaje;
         
         while(true){
             
           Socket socket = servidor.accept();
           
           ObjectInputStream flujo_entrada = new ObjectInputStream(socket.getInputStream());
           
           mensaje = (Mensaje) flujo_entrada.readObject();
           
           contacto = mensaje.getContacto();
           
           texto = mensaje.getTexto();
           
           ip = mensaje.getIp();
           /*DataInputStream flujo_entrada = new DataInputStream(socket.getInputStream());
             
           String mensaje = flujo_entrada.readUTF();
           
           jTextArea1.append("\n" + mensaje);*/
           jTextArea1.append("\n" + contacto + " : " + texto + " para " + ip);
           
           //Creamos el puente donde se redireccionara el mensaje hacia el destinatario
           Socket destinatario = new Socket(ip,9090);
           
           ObjectOutputStream entrada = new ObjectOutputStream(destinatario.getOutputStream());
           
           entrada.writeObject(mensaje);
           
           entrada.close();
           
           destinatario.close();
           
           socket.close();
           
         }
       
       } catch (IOException ex) {
           Logger.getLogger(FrmServidor.class.getName()).log(Level.SEVERE, null, ex);
       } catch (ClassNotFoundException ex) {
           Logger.getLogger(FrmServidor.class.getName()).log(Level.SEVERE, null, ex);
       }
   }

Nota: En la clase donde encapsulo el mensaje a enviar implemente la interfaz Serializable

Al igual que en el servidor implemente Runnable


Espero y puedan ayudarme con este problema dandome ideas de como soluciinarlo

Gracias de ante mano,  :)

 


· Los códigos deben ir en etiquetas GeSHi
· Los temas van en su respectivo subforo (movido a java)
>aquí las reglas del foro
-Engel Lex

srWhiteSkull

Si el cliente se encuentra fuera de la red local tienes que asignarle la IP pública del servidor, y también asegurarte que los puertos estén abiertos (desde el router hasta el propio srvidor, firewalls, etc).

La excepción indica que el tiempo de conexión se ha pasado y sin éxito en ésta, que no pudo conectar. En resumen esto puede deberse a que el servidor no es visible para el cliente por las típicas causas, dirección o puerto incorrectos, o puertos del servidor cerrados (sobre todo cuando el acceso es desde fuera de la red local).