elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema enviando Strings por sockets en una multiconexion por Thread
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema enviando Strings por sockets en una multiconexion por Thread  (Leído 2,582 veces)
undercode2

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Problema enviando Strings por sockets en una multiconexion por Thread
« en: 5 Mayo 2011, 02:39 am »

Hola que tal, miren esto es asi, es un programa que se conectan varios usuarios y tanto yo como ellos tenemos que tener la capacidad de enviarnos cadenas de texto (charlar)

Ahora bien, nesesito user Thread porque se pueden llegar a conectar muchos, y se me complica para enviar los datos porque el metodo enviarDatos que esta dentro de la clase User que es cuando ya establesco una conexion con el usuario, es el que envia las cadenas, pero yo el boton enviar lo apreto y obtengo el string en el cliente (donde esta la interfaz), y no se como hacer para poder usar el metodo ese siendo que puede llegar a haber muchos users.....pero en un primer momento no se como hacer ni para uno solo:

Les dejo un pedazo de codigo para que no se pierdan


Código
  1. class User extends Thread{
  2.  
  3.    private Socket socket = null;
  4.    private Cliente cliente = null;
  5.    private int id = 0;
  6.    private ObjectOutputStream salida;
  7.    private ObjectInputStream entrada;
  8.    private String mensaje="";
  9.  
  10.    public User(Cliente cliente,Socket socket,int id){
  11.        this.cliente = cliente;
  12.        this.socket = socket;
  13.        this.id = id;
  14.    }
  15.  
  16.  
  17.    @Override
  18.    public synchronized void run(){
  19.        try {
  20.            obtenerFlujos();
  21.        }
  22.        catch (EOFException excepcionEOF) {
  23.            System.err.println("Se desconecto alguien");
  24.        }
  25.        catch (Exception err) {}
  26.        finally {
  27.            cerrarConexion();//todo
  28.        }  
  29.    }
  30.  
  31.    private void obtenerFlujos() throws IOException{
  32.        salida = new ObjectOutputStream(socket.getOutputStream());
  33.        salida.flush();
  34.        entrada = new ObjectInputStream(socket.getInputStream());
  35.        System.out.println("Se conecto alguien");
  36.    }
  37.  
  38.    public void enviarDatos( String mensaje ) {
  39.        try {
  40.            salida.writeObject(mensaje);
  41.            salida.flush();
  42.            System.out.println("Se envio: "+ mensaje);
  43.        }
  44.        catch (IOException e) {
  45.            System.err.println("Error al escribir objeto");
  46.        }
  47.    }
  48.  
  49.  
  50. }
  51.  
  52.  
  53.  
  54. class socket extends ServerSocket implements Runnable{
  55.  
  56.    private Socket socket = null;
  57.    private Cliente cliente = null;
  58.  
  59.    public socket(int port, int backlog,Cliente cliente) throws IOException {
  60.        super(port, backlog);
  61.        this.cliente = cliente;
  62.    }
  63.  
  64.  
  65.    @Override
  66.    public synchronized void run() {
  67.        int n=0;
  68.        while(true){
  69.            try {
  70.                this.socket = accept();
  71.                User user = new User(cliente,socket,n);
  72.                user.start();
  73.            }catch(IOException e){}
  74.        }
  75.    }
  76. }
  77.  
  78.  
  79. public class Cliente extends JFrame implements ActionListener {
  80.  
  81.    private socket socket = null;
  82.  
  83.    @Override
  84.    public void actionPerformed(ActionEvent e) {
  85.        Object evt = e.getSource();
  86.        if(evt==buttonInit) {
  87.            try {
  88.                    socket = new socket(Integer.parseInt(textFieldPort.getText()),100,this);
  89.                    new Thread(socket).start();
  90.                }
  91.            }catch(IOException err){}
  92.        }
  93.        if(evt==botonComando){
  94.            user.enviarDatos(comando.getText());   //Aca no se como hacer para enviar un string a la otra persona.......
  95.        }
  96.  
  97.    }
  98.  
  99.    public Cliente(){
  100.        CrearInterfaz();
  101.        getContentPane().add(panel,BorderLayout.NORTH);
  102.        getContentPane().add(scrollPane,BorderLayout.CENTER);
  103.    }
  104.  
  105.    public static void main(String[] args){
  106.        new Cliente();
  107.    }
  108.  
  109.    private JTextField comando = null;
  110.    private JButton botonComando = null;
  111.    private JPanel panel = null;
  112.    private JScrollPane scrollPane = null;
  113.  
  114.    private void CrearInterfaz(){
  115.        this.comando = new JTextField(40);
  116.        this.botonComando = new JButton("Enviar");
  117.        this.panel.add(comando);
  118.        this.panel.add(botonComando);
  119.        this.botonComando.addActionListener(this);
  120.    }
  121.  
  122. }
  123.  

Haber si a alguien se le ocurre algo


En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Problema enviando Strings por sockets en una multiconexion por Thread
« Respuesta #1 en: 5 Mayo 2011, 03:21 am »

Usa un ThreadGroup :P

:http://www.java2s.com/Tutorial/Java/0160__Thread/0090__ThreadGroup.htm
:http://artemisa.unicauca.edu.co/~dparedes/java/threads/threadgroup.html
 
Y en tu clase socket creas un metodo get que retorne el grupo de hilos y obtienes los hilos usuarios de la siguiente manera te quedaria algo asi.

Código
  1. Thread users[] = new Thread[socket.getThreadGroup.activeCount()];
  2.    socket.getThreadGroup.enumerate(users);
  3.    for (Thread thread:users) {
  4.      ((User)thread).enviarDatos("");
  5.    }

Un saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda-Problema con multiconexión
Programación Visual Basic
Kasi 5 1,780 Último mensaje 3 Abril 2008, 15:45 pm
por Kasi
Problema con Thread
Java
1mpuls0 6 4,135 Último mensaje 8 Abril 2010, 01:31 am
por egyware
problema server socket thread
Java
momo1234 1 2,854 Último mensaje 12 Mayo 2012, 17:20 pm
por momo1234
(Solucionado) Problema con mi thread...
.NET (C#, VB.NET, ASP)
Eleкtro 0 2,113 Último mensaje 29 Noviembre 2012, 18:05 pm
por Eleкtro
Consumo excesivo de ram en thread y sockets
Programación C/C++
ShinyDavid 4 3,271 Último mensaje 1 Julio 2015, 22:30 pm
por ShinyDavid
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines