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ú

Temas - miltonprogramador

#1
Hola chicos... estoy desarrollando una aplicación web con php y me encuentro en el momento de cerrar la aplicación por inactividad... estoy llevando programación orientada a objeto y el patrón MVC... el detalle es que me consigo con una diferencia extraña.. explico un poco:

Tengo un formulario que loguea y otro que registra al visitante... el detalle es que al loguear el genera la variable de sesión que almacena la fecha y hora de inicio de sesión para compararla con la de ultimo acceso que esta en el controlador global pero al compararlas me da una diferencia de 16200... esto significa que es mucho tiempo y la aplicación la toma como sesión vencida y la cierra...

Lo que me esta rompiendo la cabeza es el porque esa diferencia si la función utilizada es la misma para ambas variables. la funcion es: date("Y-n-j H:i:s")

Tengo entendido que ese extraño número exactamente los 16200 tiene que ver con la zona horaria o algo así... pero no logro resolverlo...

AUXILIO...
#2
Hola amigos, estoy haciendo una aplicación cliente servidor y enviando un mensaje con DataOutputStream del servidor al cliente:

Código (java) [Seleccionar]

this.mensaje = "logueado";
this.mensajeEnviado = new DataOutputStream(socket.getOutputStream());
this.mensajeEnviado.writeUTF(this.mensaje);


Esto al parecer funciona sin problemas... el error ocurre de lado del cliente al intentar leer el mensaje

Código (java) [Seleccionar]

this.mensajeRecibido = new DataInputStream(sk.getInputStream());
this.mensaje = this.mensajeRecibido.readUTF(); //--> esta es la línea que me genera el error


La excepción EOFException, no me es desconocida, entiendo que al intentar leer el final de un fichero pero en este caso no se resolverlo...

Es importante decirles que anterior a la transmisión de ese mensaje, se han hecho varios en la aplicación y todos han resultado satisfactorias. Pero con este no he podido..

Podrían darme una orientación por favor?... espero me ayuden pues mis últimos post me han dejado sin respuestas.
Gracias de antemano
#3
Hola chicos.. como bien me han ayudado en anteriores casos recientemente, hoy traigo una duda más... He realizado una aplicación cliente servidor (el cliente es una clase para pruebas del servidor, es decir, no es la aplicación final) mediante socket, pero toda va bien, excepto cuando pido al cliente conectarse con un bucle con multiples conexiones. esto lo hago para probar la funcionalidad del servidor... Al hacer esto comienza hacer el trabajo pero, si pido hacer 100 conexiones solo se conectan 80 y algo, es decir, la cantidad que se conecta no es constante pero esta en el orden de los 80  a 85 cuando intento conectar 100

El resultado a las fallidas es: "connect refused" en consola (porque alli pido mostrar la excepción)

Entonces no se si es la velocidad de mi procesador que no le es suficiente para sostener el servidor o es el problema de la cantidad alta simultánea de envios desde el cliente...

En fín, les dejo el código del cliente para que tengan un panorama más claro...
Código (java) [Seleccionar]


class Persona extends Thread {
    protected Socket sk;
    protected DataOutputStream dos;
    protected DataInputStream dis;
    private int id;
    public Persona(int id) {
        this.id = id;
    }
    @Override
    public void run() {
        //System.out.println("voy aqui: " + this.id);
        try {
                sk = new Socket("localhost", 10579);
                System.out.println(id + " envía saludox");
               // sk.close();
           
        } catch (Exception ex) {
            //Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
            //System.out.println(id + "->Ha ocurrido algo inesperado... " + ex.getMessage());
            //ex.printStackTrace();
        }
    }
}
public class Cliente {
    public static void main(String[] args) {
       
        int hosts = 100;
        for (int i = 0; i < hosts; i++) {
           
            Thread clt = new Thread(new Persona(i));
            clt.start();
            try {
                clt.join();
            } catch (InterruptedException ex) {
                Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}



NOTA: En el join le he variado el tiempo, lo he colocado en 100, 400, 600, 800, 1000... ya mil me parece un tiempo laaargo, ahora el detalle es que ha mayor tiempo para la sincrnización es menor el margen de error.... MENOR pero el comportamiento sigue...

AUXILIOOO!
#4
Hola... un cliente me propone realizar una aplicación con las funcionalidades similares a open english... habitualmente, programo con php cuando voy orientado a la web, por eso coloco el post aquí...

La inquietud en particular es que nunca he visto funcionando la plataforma de open english por lo que me generan estas didas:

1.- Son clases realmente en vivo (entonces hablamos de streaming) o son clases gravadas como todo el mundo asegura.
2.- Si hablamos de streaming recomiéndenme por donde empezar puesto que nunca he realizado una alicación para esa tecnología,,,
3.- Si son clases gravadas, eso me parece genial. pero, como harían para proteger los videos que suben al servidor porque de poderse descargar ya los viera en las tienda de pirateria en venta... y eso aún no lo he visto....


Importante es destacar que no pido que me hagan el trabajo jeje, solo quiero una ayuda  para sabre por que senderos buscar porque me siento como un indio en new york en ese tema...

ESPERO su respuesta amigos...
#5
Hola amigos... hoy traigo una falla con el manejo de socket... tengo un método para iniciar la conectividad del socket en una aplicación cliente servidor pero cuando llega a ss.accept(); la aplicación simplemente se cuelga... se nota colgada porque no responde a ninguno de los controles en la vista e incluso el botón que tengo creado para iniciar la conectividad se queda presionado... entonces si esta colgada...

el método que uso para la conectividad es el siguiente:

Código (java) [Seleccionar]

private boolean iniciarConectividad(){
        ServerSocket ss;
        //Iniciando servidor...
        try {
            ss = new ServerSocket(10579);
            System.out.println("Iniciando servidor");
            //Servidor iniciado exitosamente...
            //Esto lo mantiene en eterna escucha...
            while (true) {
                Socket socket = null;
                try {
                    socket = ss.accept(); //--> JUSTO AQUI    "S E  C U E L G A"
                    System.out.println("Nueva conexión entrante: " + socket);
                    ((Hilos) new Hilos(socket, Sesion.idSesionServidor)).start();
                    Sesion.idSesionServidor++;
                    System.out.println("Esperando una nueva solicitud de conexión...");
                    return true;
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            }
        } catch (IOException ex) { Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
            //Se produjo un error al intentar iniciar el servidor...
            System.out.println("Se produjo un error al intentar iniciar el servidor...");
            return false;
        }
    }


Agradezco su ayuda... tengo todo el día tratando de darle la vuelta pero no encuentro el detalle...
#6
Java / ¿Cómo protejo los permisos de usuario?
21 Diciembre 2016, 14:37 PM
Hola... acá les traigo una duda...

Tradicionalmente para controlar los permisos de mis usuarios (los privilegios de acceso) utilizo consultas a la base de datos al ejecutar el software para armar un arreglo con los módulos a los que se tienen acceso, de esa manera, utilizando la arquitectura modelo vista controlador puedo renderizar (mostrar en la vista) solo los elementos que a las que si tiene acceso. Es decir, si un usuario no puede agregar nuevos usuarios, entonces el botón nuevo usuario no se vera en la pantalla o pudiera estar desactivado (para el caso es indiferente cualquiera de las dos), asi mismo si por alguna razón alguien logra activar el botón utilizando ingenieria inversa o algo asi, el arreglo (el de la lista de privilegios obtenido de la BD) permite la validación para dar permiso o no... HE ALLI MI DILEMA..

Me pregunto: ¿Si han logrado desbloquear un botón del sistema también podrán hacerse de mi arreglo de privilegios?

Suponiendo que si es correcta la hipótesis, entonces ¿como debo hacerlo?...

El sistema es una aplicación cliente/servidor... se me ocurrió que el cliente maneje el menor código posible, pero por menos código que maneje, así haga la consulta al servidor del permiso, este entregará un dato que indique si esta permisado para esa acción o no.... ¿Y ENTONCES ?

Aclarenme un poco la mente por favor...



Aprendiendo de los mejores llegas a ser uno de ellos...

#7
Java / ¿Cómo proteger envíos por sockets?
16 Diciembre 2016, 15:44 PM
Hola... aquí estoy con otra duda....

Diseño una aplicación de escritorio (obviamente con java) Multi-cliente/servidor, todo va bien hasta que me toca servir la seguridad.

Pienso en los siguiente:

- El usuario envía desde el cliente al servidor los datos de usuario y clave para que el servidor lo loguee.
- Cuando el servidor lo registra envia el id de su sesion inciada entre algunos otros datos.

Entonces, la duda es: si alguien interviene ese envio y puede hacerse del id de sesión del usuario, ¿Esto significa que el puede actuar como el usuario desde otra aplicación? Cómo puedo evitar eso?

Otra vez agradeceré infinitamente su ayuda....

Aprendiendo de los mejores llegaré a ser uno de ellos
#8
Hola... este post es relacionado al anterior pero como la duda ahora es más específica en otro sentido he decidido abrir este nevo tema... resulta que pretendo manejar sesiones dejando las variables cargadas en la clase principal para no tener que consultar la base de datos por gusto... intente con herencia y no se si será por alli el camino... pero como no lo he logrado, pense un poco y se me ocurre pasar por parametro la instancia de una clase que mantenga los valores de sesion... instancia que se hizo en la clase principal... asi se mantendra la clase viva ycon ella sus atributos, los cuales para usarse bastará con pasar por parametro la misma instancia de la clase sesion a la clase que los usará o modificará... He escrito 4 clases y funciona la idea basica....

me gustaria saber si ¿es una locura lógica lo que digo o esto me resolvería definitivmente el problema?

Les muestro los codigos y les agradezco la ayuda.... es algo que me urge

Código (java) [Seleccionar]

//la clase sesión
public class Sesion {
    int num;
    public Sesion(){
        num=20;
    }
}

//La clase principal
public class Clase {
    public Sesion sesion;
    public Clase(){
       
    }
    public Clase(String ini) {
        sesion = new Sesion();
        System.out.println("Clase > Invocando a Hija1");
        Hija1 log = new Hija1(sesion);
        System.out.println("Clase > Num:" + sesion.num);
        Hija2 log2 = new Hija2(sesion);
        System.out.println("Clase > Num:" + sesion.num);
    }
    public static void main(String[] args) {
        Clase log = new Clase("ini");
    }
}


//Las clases hijas

public class Hija1 extends Clase {
public Hija1(){
     
}   
public Hija1(Sesion obj){
     System.out.println("Hija1 > El valor num es: " + obj.num);
     obj.num = 37;
     System.out.println("Hija1 > He cambiado el valor de num a: " + obj.num);
}   
}

//la otra clase hija

public class Hija2 extends Clase {
public Hija2(){
     
}   
public Hija2(Sesion obj){
     System.out.println("Hija2 > El valor num es: " + obj.num);
     obj.num += 100;
     //System.out.println("Hija1 > He cambiado el valor de num a: " + this.num);
}   
}



Ayuda
#9
¿En qué estoy fallando en herencia java?

Hola a todos, esta es mi primera vez que pido ayuda en este foro y espero que puedan ayudarme a la brevedad posible porque tengo gran urgencia...

Les explico: Estoy desarrollando un sistema servidor con soporte a multiples clientes en java. Hasta ahora apenas vy por el desarrollo del servidor y mi dificultad en cocreto es mantener los datos de logueo (o sessión) en memoria con los cambios que las clases hijas puedan hacer, es decir, especificamente tengo una super clase denominada "Servidor" y una que hereda de ella denominada "Personas". Colocare las secciones del código que mestran la dificultad:
Código (java) [Seleccionar]

class Servidor {
    /* Declaración de variables */
    private   Escritorio    escritorio;
    private   Escritorio    vstEscritorio;
    private   Validador     validacion;
    public    Icono         ico;
    public    boolean       estadoSesion, foco;
    //private String        pantallaActiva;
    protected String[][]    validable;
    //Variables de Sesion
    public   boolean        autenticado;
    public   int            idSesionServidor;
    public   String         idUsuarioServidor;
    public   String         privilegioUsuarioServidor;
    public   String         nombreUsuarioServidor;
    public   String         fechaSesionServidor;
    public   String         horaSesionServidor;
    //public   String        ultimaSesionUsuarioServidor;
    public   HashMap        permisosUsuarioServidor;
    //Constructores ...........................................................
    public Servidor(){
    }
    public Servidor(String ini){
        vstEscritorio = new Escritorio();
        mostrarVista(vstEscritorio);
        iniciarVariables();
        escritorio.txtABitacora.setText(
                                escritorio.txtABitacora.getText() +
                                Bitacora.get(                                       
                                        ">> Hola!, el servidor 'nombre del servidor' "
                                        + "está activo.\n>> Por ahora sus "
                                        + "servicios se encuentran apagados.",
                                        this.nombreUsuarioServidor
                                )
                        );
        if ( idSesionServidor != 0 ){
            iniciarConectividad();
        }else{
            escritorio.txtABitacora.setText(
                                escritorio.txtABitacora.getText() +
                                Bitacora.get(                                       
                                        ">> Se requiere Autenticación de Usuario",
                                        this.nombreUsuarioServidor
                                )
                        );
            autenticarUsuario();
            System.out.println(this.nombreUsuarioServidor); // ---> AQUI NO MUESTRA EL NOMBRE DE USUARIO ACTUALIZADO. (E S T A   E S   L A   D I F I C U L T A D )
            if ( autenticado == true ) {
                escritorio.txtABitacora.setText(
                                escritorio.txtABitacora.getText() +
                                Bitacora.get(                                       
                                        ">> Ya pueden iniciarse los servicios",
                                        this.nombreUsuarioServidor   //--->OBVIAMENTE AQUI TAMPOCO MUESTRA EL DATO ACTUALIZADO
                                )
                        );
            }
        }
    }
    private void iniciarVariables(){
        //Variables de sesion
        autenticado = false;
        idSesionServidor = 0; //Variable con el id de la sesion.....
        idUsuarioServidor = "svr";
        privilegioUsuarioServidor = "boot";
        nombreUsuarioServidor = "Servidor";
       
    }
    private void autenticarUsuario() {
        CtrlPersonas vstLogin = new CtrlPersonas();
        escritorio.txtABitacora.setText(
                                escritorio.txtABitacora.getText() +
                                Bitacora.get(                                       
                                        ">> Abriendo el formulario de "
                                        + "Autenticación de Usuario",
                                        this.nombreUsuarioServidor
                                )
                        );
        vstLogin.mostrarVistaLogin(escritorio);
    }
}


Este es el constructor y el metodo del problema de la clase Persona que extiende a Servidor

Código (java) [Seleccionar]

//Constructor
    public CtrlPersonas(){
        super(); // ---->> COLOCANDO ESTA LÍNEA O SIN ELLA IGUAL MENTE PEDO acceder A LAS VARIABLES...
        modPersonas = new ModeloPersonas();
    }


//Asi se modifican las variables, mismas que al intentar acceder al valor (que ahora deberia ser el colocado en este método) no lo mantiene y se obtiene es el valor original de la super clase


   this.idUsuarioServidor = resultadoUsuario.getString("rif_personas");
   this.nombreUsuarioServidor = resultadoUsuario.getString("pnombre_personas") + " " + resultadoUsuario.getString("papellido_personas") ;
   this.privilegioUsuarioServidor = resultadoUsuario.getString("privilegio_personas");
   this.fechaSesionServidor = Calendario.get("fecha", null);
   this.horaSesionServidor = Calendario.get("hora", null);
   


Reitero, leer las variables desde la clase personas si se ve el cambio registrado pero, al regresar a la clase Servidor no... y creo que ya deberia hacerlo puesto que la clase servidor se mantiene activa en todo momento, de tal forma que las variables estan en memoria susceptibles a las modificaciones...

Pido, con humildad, su ayuda con urgeeeeeeeeeeeencia... porque de los expertos se aprende a serlo también... gracias de ante mano...