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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Error tonto con threads y sockets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Error tonto con threads y sockets  (Leído 12,218 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #10 en: 27 Diciembre 2009, 20:19 pm »

no saca los socket solo llama al metodo escritura y pues si es correpto el servidor funcionara bien ya lo veras
llamo al metodo de escritura sobre la hashTable? pero no deberia hacer lo siguiente:

for(int i = 0;length de hashtable; i++){
Socket socketVolatil = hashTable.getKey(o parecido)
socketVolatil.writeUtf(datosrecividosdeuncliente);
}

NO?

Saludos


En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #11 en: 27 Diciembre 2009, 20:26 pm »

tambien funciona pero mi recomendacion es que los hilos en si tengan su entrada y salida interna seria

hashTable.getKey(ID).metodoDeEscritura("texto");

class usuario extends Therad{
public void write(String text){
    ......
    }
}
class servidor {
....
socket.acept():
Usuario usuario = new Usuario(socket);
HastTable.put("ID",usuario);
usuario.start;
}


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #12 en: 27 Diciembre 2009, 20:46 pm »

tambien funciona pero mi recomendacion es que los hilos en si tengan su entrada y salida interna seria

hashTable.getKey(ID).metodoDeEscritura("texto");

class usuario extends Therad{
public void write(String text){
    ......
    }
}
class servidor {
....
socket.acept():
Usuario usuario = new Usuario(socket);
HastTable.put("ID",usuario);
usuario.start;
}
Me da un nuevo problema... y no entiendo porque :s

Mira te lo enseño:

Cuando el servidor recive una nueva conexion, por tanto un nuevo cliente aumenta el contador de clientes, cuando este se va disminuye en uno el contador, asi que uso esas keys para identificarlos en la hashTable:

Código
  1. public void ServidorChat()
  2.    {
  3.        try
  4.        {
  5.            ServerSocket socketServidor = new ServerSocket(5558);
  6.  
  7.            while (true)
  8.            {
  9.                System.out.println("Esperando conexiones...");
  10.                Socket cliente = socketServidor.accept();
  11.                contador++;
  12.                System.out.println("Bienvenid@ cliente numero " + contador + ".\n");
  13.  
  14.  
  15.                Runnable nuevoCliente = new ThreadServidor(cliente);
  16.                Thread hilo = new Thread(nuevoCliente);
  17.                hilo.start();
  18.                System.out.println("Te hemos asignado el thread: " + hilo + ".\n");
  19.                vextorClientes.put(contador, socket);
  20.  
  21.  
  22.            }
  23.        } catch (Exception e)
  24.        {
  25.            e.printStackTrace();
  26.        }
  27.    }
  28.  
Y ahi em da error al ejecutar, es decir, cuando recivo una nueva conexion y guardo los datos del cliente en el vector (HashTable), me da el siguiente error:

Esperando conexiones...
java.lang.NullPointerException
Bienvenid@ cliente numero 1.
        at threads.ThreadServidor.<init>(ThreadServidor.java:41)
        at sockets.Servidor.ServidorChat(Servidor.java:41)
        at sockets.Servidor.main(Servidor.java:23)


En la linea que marca error tengo el HashTable que reocje el socket y la clave.
Porque? no lo se...


Saludos
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #13 en: 27 Diciembre 2009, 21:16 pm »

en fragmento no veo nada malo :P a no ser que el hastTable no este definido HastTable<Integer,Socket> tambien creo que tu ThreadServidor era Thread y lo estas pasando a runable para luego a Thread eso no es bueno. por lo demas no veo el error en ese fragmento
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #14 en: 27 Diciembre 2009, 21:47 pm »

en fragmento no veo nada malo :P a no ser que el hastTable no este definido HastTable<Integer,Socket> tambien creo que tu ThreadServidor era Thread y lo estas pasando a runable para luego a Thread eso no es bueno. por lo demas no veo el error en ese fragmento
osea que el paso a runable lo puedo quitar y ejecutar directamente el thread?
Edito:
Ahora he declarado la hastable como me has dicho y hay otro error:

Esperando conexiones...
Bienvenid@ cliente numero 1.

java.lang.NullPointerException
Te hemos asignado el thread: Thread[Thread-1,5,main].
        at sockets.Servidor.ServidorChat(Servidor.java:45)
        at sockets.Servidor.main(Servidor.java:23)


Adios cliente 1

No veo porque ocurre pero weno...

Saludos

EDITO:
Solucionado, hacia falta instanciar el obejto mediante el operador new:
Código
  1. public static Hashtable<Integer,Socket> vectorClientes = new Hashtable();
  2.  

Ahoraaa si, voy a probar con el metodo que me dijiste.
Me parece increible que se peuda automatizar una tarea tan compleja, crear microprocesos para cada cliente y que etsen activos todo el rato atendiendo a sus clientes, que se recorran las listas de clientes y se envien datos...

Cada vez es mas flipante.

Saludos
« Última modificación: 27 Diciembre 2009, 21:56 pm por ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ » En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #15 en: 27 Diciembre 2009, 21:52 pm »

claro ya que TheadServidor ya extends de Thread. por cierto de dejo el code de mi jchat estoy seguro de que de algo te servira ;)
http://www.mediafire.com/?3t3jhjxu2oz

Saludos.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #16 en: 27 Diciembre 2009, 21:57 pm »

claro ya que TheadServidor ya extends de Thread. por cierto de dejo el code de mi jchat estoy seguro de que de algo te servira ;)
http://www.mediafire.com/?3t3jhjxu2oz

Saludos.
Gracias lo ojeare como curiosidad, pero esto es algo que quiero hacerlo yo solo xD

Bueno, usando vuestra ayuda pero salir de los aprietos con mi propio codigo.

Saludos
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #17 en: 27 Diciembre 2009, 22:30 pm »

Otro problema extraño, he construido el bucle para leer todos los sockets y escribirlos en flujo uno a uno , lo he hecho asi:

Código
  1. public void run() {
  2.        try {
  3.          while(acabado){
  4.  
  5.            String mensajeRecivido = dataInput.readUTF();
  6.            System.out.println(mensajeRecivido);
  7.            //dataOutput.writeUTF(mensajeRecivido);
  8.            System.out.println("Hay " + Servidor.vectorClientes.size() + " conectados.\n");
  9.  
  10.            for(int i = 0; i < Servidor.vectorClientes.size(); i++)
  11.            {
  12.                Socket socketVolatil = Servidor.vectorClientes.get(i);
  13.                dosVolatil = new DataOutputStream(socketVolatil.getOutputStream());
  14.                dosVolatil.writeUTF(mensajeRecivido);
  15.            }
  16.            System.out.println("Mi id es: " + quienSoy);
  17.  
  18.          }
  19.  
  20.        } catch (IOException ex) {
  21.           System.out.println("Adios cliente " + quienSoy + "\n");
  22.  
  23.           Servidor.contador--;
  24.  
  25.  
  26.        }
  27.  
Y ahora al primer mensaje que envio con alguno de los clientes, me lo pone en el servidor pero no me lo refleja a mi pantalla, es decir a la de mi cliente, solo al servidor, y el proceso de este cliente se muere, activo otro cliente y pasa lo mismo.

MIrad el error que da cuando envio algo:

Citar
Exception in thread "Thread-1" java.lang.NullPointerException
        at threads.ThreadServidor.run(ThreadServidor.java:64)
        at java.lang.Thread.run(Thread.java:619)
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #18 en: 27 Diciembre 2009, 22:41 pm »

claro que da error el hastTable esta definido por keys mas no indices enteros para recorrerlo es asi
Código
  1. Hashtable<Integer, String> hash = new Hashtable<Integer, String>();
  2.    Enumeration<String> elemets = hash.elements();
  3.    while(elemets.hasMoreElements()){
  4.     elemets.nextElement();
  5.    }
Saludos.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Error tonto con threads y sockets
« Respuesta #19 en: 27 Diciembre 2009, 22:43 pm »

claro que da error el hastTable esta definido por keys mas no indices enteros para recorrerlo es asi
Código
  1. Hashtable<Integer, String> hash = new Hashtable<Integer, String>();
  2.    Enumeration<String> elemets = hash.elements();
  3.    while(elemets.hasMoreElements()){
  4.     elemets.nextElement();
  5.    }
Saludos.
le pedia indice 0 y el mas pequeño era 1 xDDD

Ahora un nuevo problema, la cosa concurre en lo siguiente:
Cuando los dos clienets se conectan a la vez bien, se tramitan mensajes de coña y eso, pero si uno se conecta antes que otro la hemos jodido porque en el thread del otro no hay la conexion de los otros, y no envia a todos.

EDITO:
He investigado mas sobre el tema y ocurre lo siguiente:
Creo nuevo cliente, envio mensaje, solo  se ve a si mismo, es evidente, creo otro (ya van 2) y envio y se ve a los otros y a si mismo, pero a el no le llega lo del cliente 1.
Es decir, que al ultimo no le llega nada, ni lo que el escribe ni lo que los demas escriben, como es eso?



Saludos
« Última modificación: 27 Diciembre 2009, 22:49 pm por ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ » En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Sockets] - Error en BIND
Programación C/C++
farresito 2 4,540 Último mensaje 26 Abril 2011, 19:52 pm
por farresito
[AYUDA] Error en sockets
Programación C/C++
goro_333 6 4,106 Último mensaje 20 Mayo 2012, 22:56 pm
por goro_333
error al compilar sockets en c
Programación C/C++
Drewermerc 1 2,649 Último mensaje 27 Abril 2014, 22:54 pm
por Drewermerc
Corrigen el error más tonto del mundo en la calculadora de Windows 10 que ...
Noticias
wolfbcn 0 945 Último mensaje 24 Enero 2019, 21:58 pm
por wolfbcn
Uso de Threads y error de compilación asignado a una libreria estandar...
Programación C/C++
digimikeh 1 1,718 Último mensaje 4 Agosto 2019, 21:17 pm
por Loretz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines