Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - deltacompu

#1
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!!!!!!!!!!!!!!!!!  ;)
#2
Java / Re: Recuperar la ultima linea en un JtextArea
14 Diciembre 2010, 13:13 PM
Que bueno es tener un baul de los recuerdos, el codigo funciona muy bien....

Muchas gracias por tu ayuda

;-) ;-)
#3
Java / Recuperar la ultima linea en un JtextArea
14 Diciembre 2010, 02:31 AM
Hola a todos!!!!

En este momento me encuentro realizando una aplicacion muy basica pero me ha dado algunos dolores de cabeza, basicamente estoy haciendo una conversacion cliente-servidor, ya hice la implentacion por consola y funciona, ahora la estoy implementando en una GUI (Interfaz Grafica), construi dos ventanas, una para el servidor y otra para el cliente, en cada una dos JTextArea las cuales estan contenidas en un JScroll, la conexion se realiza de manera adecuada, cuando el cliente envia la primera linea al sevidor estas es recibida y mostrada por el servidor en la correspondiente caja de texto pero cuando el cliente envia la segunda linea, el servidor recibe las lineas anteriores y la ultima, en otras palabras cada vez que el usuario oprima la tecla enter (este es el evento para enviar al servidor o viceversa) el metodo toma todo el texto contenido en la caja de texto incluyendo el que ya ha sido enviado y lo envia al server aqui dejo  mi codigo, si alguien pudiese ayudarme seria muy valioso, muchas gracias.

TextClient.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == e.VK_ENTER) {
               String cadena= TextClient.getText();
               if (!cadena.equals("STOP"))
               {
               
                   output.println(TextClient.getText());

               }
               else
               {
                  try {
                     socket.close();
                  }
                  catch (IOException e1) {
                     e1.printStackTrace();
                  }
               }
               
               
               
               
            }
         }
      });