Como correr un metodo en todos los hilos Activos

Iniciado por deltacompu, 17 Diciembre 2010, 08:43 AM

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

deltacompu

Hola a todos!!!

Mi proyecto de hacer una chat cada vez le salen mas cosas, actualmente la conversacion cliente servidor se lleva a cabo exitosamente, un servidor es capaz de atender a a varios clientes a la vez y responder a cada uno de ellos separadamente, sin embargo ahora estoy en la tarea de enviar la respuesta de una de la conversaciones a todos los clientes que se encuentran conectados, en otras palabras usando un objeto de la clase PrintWriter quiero enviar el mismo string a todos los hilos existentes en un instante de tiempo, leyendo el API existen metodos que me permiten deterinar cuantos hilos se encuentran activos, el grupo al que pertenecen y de hecho existen metodos para manejar al tiempo todos los hilos que esten activos, pero no encuentro la manera de usar mi propio metodo para enviar una respuesta a todos los hilos (clientes) que se encuentren activos..

Podira alguien indicarme como hacerlo o darme una idea, pense en hacer un metodo el cual recibiera  el string que se quiere enviar a todos los clientes y por medio de un objeto de la clase PrintWriter enviarlo a todos los hilos activos, pero no funciono la respuesta es enviada solo a un hilo.

Dejo parte de mi programa

public class MyGUIServer extends JFrame {
   /**
    *
    */
   private static final long serialVersionUID = 1L;
   static final int PUERTO = 5000;
   private static ServerSocket skServidor;
   private Socket skCliente;
   private JTextArea TextServer = new JTextArea();
   private JTextArea TextClient = new JTextArea();
   
   public static void main(String[] arg) throws IOException {
      new MyGUIServer();

   }

   public MyGUIServer() throws IOException {
      
      setSize(500, 300);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setTitle("MY SERVER");
      setVisible(true);

      getContentPane().setLayout(new GridLayout(2, 1));
      JScrollPane jScrollPane1 = new JScrollPane(TextServer);
      JScrollPane jScrollPane2 = new JScrollPane(TextClient);
      jScrollPane1.setBorder(new TitledBorder("Server"));
      jScrollPane2.setBorder(new TitledBorder("Client"));
      getContentPane().add(jScrollPane1, BorderLayout.CENTER);
      getContentPane().add(jScrollPane2, BorderLayout.CENTER);

      TextServer.setWrapStyleWord(true);
      TextServer.setLineWrap(true);
      TextClient.setWrapStyleWord(true);
      TextClient.setLineWrap(true);

      try
      {
         skServidor = new ServerSocket( PUERTO );
      }
      catch (IOException ioEx)
      {
         TextServer.append("\nUnable to set up port!");
         System.exit(1);
      }
      int x=1;
      do {
      skCliente = skServidor.accept(); // Crea objeto
      TextServer.append("Sirvo al Cliente" + x + "\n");
      new ReceiveServer(skCliente).start();
      x++;
      }    
       while (true);
      
      
}

   class ReceiveServer extends Thread {
      private Socket skCliente;
      private Scanner input;
      private PrintWriter output;

      public ReceiveServer(Socket socket)
      {
         skCliente = socket;
         try
         {
             input= new Scanner(skCliente.getInputStream());
             output = new PrintWriter(skCliente.getOutputStream(), true);
         }
      catch(IOException ioEx)
         {
            ioEx.printStackTrace();
         }
      }

      public void run()

      {
         String message;
         int x = 1;
         do {
            // Step 3: Set up input and output streams
            // Step 4: Receive and send data
            message = input.nextLine();
            TextClient.append(message + "\n");
            RespondAll (output, message);
            x++;
         } while (!message.equals("STOP"));
         
         // Step 5: Close socket

         try {
            skCliente.close();
         }

         catch (IOException e) {
            e.printStackTrace();
         }
      }
   }

   private void RespondAll(PrintWriter output2, String message) {
      
      final PrintWriter output=output2;      
      output.println(message);
      
   }
}


Gracias a todos!!!!!!!!!!!!!!!!!  ;)