Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/04/2011, 09:43
er_pablito_85
 
Fecha de Ingreso: abril-2011
Mensajes: 2
Antigüedad: 13 años, 9 meses
Puntos: 0
socket en java 2 clientes y 1 centralita

Hola, estoy realizando una aplicacion de socket en java con entorno grafico, la cual hace lo siguiente:

quiero enviar un fichero desde el cliente 1 al cliente 2, pero pasando por la centralita, que es el medio de comunicacion entre los dos clientes.

yo he realizado el codigo pero no esta correcto, ya que he empezado a tocar este tema de los socket hace poco tiempo, asi que me gustaria que me ayudaseis, os pongo aqui el codigo que he realizado.

ENTORNO GRAFICO DE LOS CLIENTES
El entorno gragico tiene 2 campos de texto, 1 para insertar el puerto por el que se comunican y otro para colocar la ruta del fichero que se quiere enviar, un textarea que es donde se van a poner todas las incidencias que vayan ocurriendo en el transcuso de la comunicacion y 2 botones, 1 para enviar y otro para recibir.

ENTORNO GRAFICO DE LA CENTRALITA
la centralita consta de 1 textarea que es donde se muestran los mensajes de lo que se va haciendo en el transcurso de la comunicacion y 2 botones, enviar y recibir.

------CODIGO DE LOS CLIENTES-----------
Código java:
Ver original
  1. import java.io.*;
  2. public class Cliente_B extends javax.swing.JFrame {
  3.     /** Creates new form Cliente_B */
  4.     java.net.Socket sck;
  5.     java.io.DataInputStream dis;
  6.     java.io.DataOutputStream dos;
  7.     java.io.BufferedReader br;
  8.     java.io.File fich_B;
  9.  
  10.     String mensaje_B, enviar;
  11.  
  12.     public Cliente_B() {
  13.         initComponents();
  14.  
  15.         try
  16.         {
  17.             //sck=new java.net.Socket("localhost", this.txt_puerto_cliente_A.getText());
  18.             sck=new java.net.Socket("localhost", 9902);//"aqui va el puerto"
  19.             dis=new java.io.DataInputStream(sck.getInputStream());
  20.             dos=new java.io.DataOutputStream(sck.getOutputStream());
  21.         }
  22.         catch(IOException ex)
  23.         {
  24.             this.txa_cliente_B.append("1. Error de E/S con excepcion: "+ex);
  25.         }
  26.        
  27.     }
  28.  
  29. // BOTON ENVIAR
  30. private void btn_enviar_cliente_BActionPerformed(java.awt.event.ActionEvent evt) {                                                    
  31.         // TODO add your handling code here:
  32.         try
  33.         {
  34.             enviar=this.txa_cliente_B.getText();
  35.             dos.writeUTF("\n"+enviar);
  36.             this.txa_cliente_B.append("\nEnviando mensaje ..."+enviar);
  37.  
  38.             dis.close();
  39.             dos.close();
  40.             sck.close();
  41.         }
  42.         catch(IOException ex)
  43.         {
  44.             this.txa_cliente_B.append("2. ERROR de E/S con excepcion: "+ex);
  45.         }
  46.     }
  47.  
  48. // BOTON RECIBIR
  49.  
  50. private void btn_recibir_cliente_BActionPerformed(java.awt.event.ActionEvent evt) {                                                      
  51.         // TODO add your handling code here:
  52.         try
  53.         {
  54.             mensaje_B=dis.readUTF();
  55.             this.txa_cliente_B.append(mensaje_B);
  56.  
  57.             this.txa_cliente_B.append("Fin de transmision ...");
  58.         }
  59.         catch(IOException ex)
  60.         {
  61.             this.txa_cliente_B.append("3. Error de E/S con excepcion"+ex);
  62.         }
  63.     }

------CODIGO CENTRALITA-----------
Código java:
Ver original
  1. import java.io.*;
  2. public class Centralita extends javax.swing.JFrame {
  3.     /** Creates new form Centralita */
  4.     java.net.ServerSocket ssckserver1;
  5.     java.net.Socket sck1;
  6.     java.io.File fich;
  7.     java.io.FileReader fr;
  8.     java.io.BufferedReader br;
  9.     java.io.DataInputStream dis1;
  10.     java.io.DataOutputStream dos1;
  11.  
  12.     String enviar, mensaje;
  13.  
  14.     public Centralita() {
  15.         initComponents();  
  16.     }
  17.  
  18. // BOTON ENVIAR
  19. private void btn_enviar_centralitaActionPerformed(java.awt.event.ActionEvent evt) {                                                      
  20.         // TODO add your handling code here:
  21.         try
  22.         {
  23.             ssckserver1=new java.net.ServerSocket(9901);
  24.  
  25.             sck1=ssckserver1.accept();
  26.  
  27.             dis1=new java.io.DataInputStream(sck1.getInputStream());
  28.  
  29.             dos1=new java.io.DataOutputStream(sck1.getOutputStream());
  30.  
  31.             fich=new java.io.File("./datos.txt");
  32.  
  33.             if (fich.exists())
  34.             {
  35.                 fr=new java.io.FileReader(fich);
  36.                 br=new java.io.BufferedReader(fr);
  37.  
  38.                 mensaje=br.readLine();
  39.                 while (mensaje!=null)
  40.                 {
  41.                     if(sck1.isConnected())
  42.                     {
  43.                         dos1.writeUTF(mensaje);
  44.                         this.txa_centralita.append("\nEnviando al cliente... "+mensaje);
  45.                     }
  46.                     else
  47.                     {
  48.                         this.txa_centralita.append("\nCliente 1 desconectado.");
  49.                     }
  50.                 }
  51.                 dos1.close();
  52.                 sck1.close();
  53.                 ssckserver1.close();
  54.             }
  55.             else
  56.             {
  57.                 this.txa_centralita.append("El fichero elegido no existe.");
  58.             }
  59.         }
  60.         catch(IOException ex)
  61.         {
  62.             this.txa_centralita.append("Error de E/S con excepcion: "+ex);
  63.         }
  64.     }
  65. // BOTON RECIBIR
  66. private void btn_recibir_centralitaActionPerformed(java.awt.event.ActionEvent evt) {
  67.         // TODO add your handling code here:
  68.         try
  69.         {
  70.             ssckserver1=new java.net.ServerSocket(9901);
  71.  
  72.             sck1=ssckserver1.accept();
  73.  
  74.             dis1=new java.io.DataInputStream(sck1.getInputStream());
  75.  
  76.             dos1=new java.io.DataOutputStream(sck1.getOutputStream());
  77.  
  78.             fich=new java.io.File("./datos.txt");
  79.  
  80.             if (fich.exists())
  81.             {
  82.                 fr=new java.io.FileReader(fich);
  83.                 br=new java.io.BufferedReader(fr);
  84.  
  85.                 mensaje=br.readLine();
  86.                 while (mensaje!=null)
  87.                 {
  88.                     if(sck1.isConnected())
  89.                     {
  90.                         dos1.writeUTF(mensaje);
  91.                         this.txa_centralita.append("\nEnviando al cliente... "+mensaje);
  92.                     }
  93.                     else
  94.                     {
  95.                         this.txa_centralita.append("\nCliente 1 desconectado.");
  96.                     }
  97.                 }
  98.                 dos1.close();
  99.                 sck1.close();
  100.                 ssckserver1.close();
  101.             }
  102.             else
  103.             {
  104.                 this.txa_centralita.append("El fichero elegido no existe.");
  105.             }
  106.         }
  107.         catch(IOException ex)
  108.         {
  109.             this.txa_centralita.append("Error de E/S con excepcion: "+ex);
  110.         }
  111.     }