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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1]
1  Foros Generales / Sugerencias y dudas sobre el Foro / Sugerencia sobre etiqueta code en: 15 Junio 2014, 10:00 am
Buenos días, tardes, noches:

Quiero hablar sobre la etiqueta code, lo que ocurre es que cuando publico un post que contenga un código fuente, para hacer mas fácil la visibilidad agrego dicha etiqueta. El problema es que a veces los códigos son demasiados extensos, por ende, el post se ve menos limpio. No se si el administrador o quién sea, ¿Podría agregarle un Scrollbar horizontal y vertical a dicha etiqueta? Se que se puede porque en muchos foros utilizan eso.

Saludos

2  Programación / Java / Problemas (bloqueado) con socket en java en: 15 Junio 2014, 01:52 am
Estimados:

Tengo un problema con un envío de ficheros, el problema es que el socket o hilo, en realidad no se, se bloquea. esta es la clase que usa el cliente y el servidor para el envio y recepción de ficheros. Dejo en claro que esto solo envía ficheros de textos. La verdad es que no tengo problemas al enviar o recibir un fichero de texto por localhost, el problema viene cuando uso internet. Solo logro enviar y recibir textos como por ejemplo el nombre del usuario, dirección, cosas así. Alguien tendría la amabilidad de ayudarme por favor.

Pd: Es un servidor que gestiona multiples clientes. Estas funciones son usadas el metodo run().

El servidor recibe 2 archivos, y responde con un archivo.

Código
  1. package Mensaje;
  2.  
  3. import java.io.*;
  4. import java.net.*;
  5. import java.util.*;
  6. import java.util.StringTokenizer;
  7. import java.util.logging.Level;
  8. import java.util.logging.Logger;
  9.  
  10. /**
  11.  * Mensaje para pedir un fichero.
  12.  */
  13. public class DameFichero
  14. {
  15.    public Socket socket;
  16.  
  17.    public DameFichero(Socket socket)
  18.    {
  19.        this.socket = socket;
  20.    }
  21.  
  22.    public String leerArchivoNotas(String nombreFileNotas)
  23.    {
  24.        File archivo;
  25.        String linea;
  26.        FileReader fr = null;
  27.        BufferedReader br = null;
  28.        FileWriter archivoResultado;
  29.        PrintWriter pw = null;
  30.  
  31.        try
  32.        {
  33.            // Apertura del fichero y creacion de BufferedReader para poder
  34.            // hacer una lectura comoda (disponer del metodo readLine()).
  35.            archivo = new File (nombreFileNotas);
  36.  
  37.            fr = new FileReader (archivo);
  38.            br = new BufferedReader(fr);
  39.            archivoResultado = new FileWriter("resul_"+nombreFileNotas);
  40.            pw = new PrintWriter(archivoResultado);
  41.  
  42.            // Lectura del fichero
  43.  
  44.            int contador = 0;
  45.  
  46.            //leemos las lineas que no nos sirven para calcular las notas
  47.            linea=br.readLine();
  48.            linea=br.readLine();
  49.            linea=br.readLine();//en esta linea los nombres de las columnas
  50.  
  51.            pw.println(linea+"\tPromedio_final");// le agregamos una ultima colum
  52.  
  53.            while((linea=br.readLine())!=null)
  54.            {
  55.                try
  56.                {
  57.                    //filtramos por tokens
  58.                    StringTokenizer st = new StringTokenizer(linea,"\t");
  59.                    float C1, C2, C3, NE;
  60.                    //quitamos los tokens que no nos sirven
  61.                    for (int i = 0; i < 3; i++)
  62.                        st.nextToken();
  63.  
  64.                    C1 = Float.parseFloat(st.nextToken());
  65.                    C2 = Float.parseFloat(st.nextToken());
  66.                    C3 = Float.parseFloat(st.nextToken());
  67.                    NE = Float.parseFloat(st.nextToken());
  68.                    //escribimos la nota al final de cada columna
  69.                    pw.println(linea+"\t"+Redondear(getNotaFinal(C1,C2,C3,NE)));
  70.                }
  71.                catch (Exception e)
  72.                {
  73.                    System.out.println("problemas con el numero flotante");
  74.                    e.printStackTrace();
  75.                }
  76.            }
  77.        }
  78.        catch(Exception e){
  79.            e.printStackTrace();
  80.        }
  81.        finally
  82.        {
  83.            // En el finally cerramos el fichero, para asegurarnos
  84.            // que se cierra tanto si todo va bien como si salta
  85.            // una excepcion.
  86.            try
  87.            {
  88.                fr.close();
  89.                br.close();
  90.                pw.close();
  91.            }
  92.            catch (Exception e2){
  93.                e2.printStackTrace();
  94.            }
  95.        }
  96.  
  97.        return "resul_"+nombreFileNotas;
  98.    }
  99.  
  100.  
  101.  
  102.    public void EnviarArchivo(String nombreArchivo)
  103.    {
  104.        PrintWriter pw1 = null;
  105.        BufferedReader br1 = null;
  106.  
  107.        try
  108.        {
  109.            // Creamos el archivo que vamos a enviar
  110.            File archivo = new File(nombreArchivo);
  111.  
  112.            if(!archivo.exists())
  113.            {
  114.                System.out.println("El archivo a "+nombreArchivo+" no existe");
  115.                return ;
  116.            }
  117.            // Obtenemos el tamaño del archivo
  118.            int tamañoArchivo = (int)archivo.length();
  119.            File filenombreArchivo = new File(nombreArchivo);
  120.  
  121.            // Creamos flujo de entrada para realizar la lectura del archivo en bytes
  122.            FileReader fr = new FileReader(filenombreArchivo);
  123.            String buffer;
  124.            int i = 1;
  125.  
  126.            pw1 = new PrintWriter(this.socket.getOutputStream(), true);
  127.            br1 = new BufferedReader(fr);
  128.  
  129.            System.out.println("El tamaño del archivo a enviar: "+tamañoArchivo);
  130.            /*
  131.             synchronized (pw1)
  132.             {
  133.             */
  134.            while((buffer=br1.readLine())!=null)
  135.            {
  136.                pw1.println(buffer);
  137.                System.out.println(i+") "+buffer.length());
  138.  
  139.                try {
  140.                    Thread.sleep(100);//le puse este sleep para depurar
  141.                } catch (InterruptedException ex) {
  142.                    System.out.println("Excepcion del sleep()");
  143.                    //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  144.                }
  145.                i++;
  146.            }
  147.            //    pw1.notify();
  148.            //}
  149.            fr.close();
  150.        }
  151.        catch(IOException e)
  152.        {
  153.            System.err.println(e.toString());
  154.        }
  155.        finally
  156.        {
  157.            try
  158.            {
  159.                br1.close();
  160.                //pw1.close();
  161.            }
  162.            catch (IOException ex) {
  163.                Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  164.            }
  165.        }
  166.    }
  167.  
  168.    public void RecibirArchivo(String nombreArchivo, int tam)
  169.    {
  170.        PrintWriter pw2 = null;
  171.        BufferedReader br2 = null;
  172.  
  173.        try
  174.        {
  175.            String buffer;
  176.            int i = 1;
  177.            File filenombreArchivo = new File(nombreArchivo);
  178.            FileWriter fw = new FileWriter(filenombreArchivo);
  179.            pw2 = new PrintWriter(fw);
  180.            br2 = new BufferedReader(new InputStreamReader(
  181.                                        this.socket.getInputStream()));
  182.  
  183.            //synchronized (br2)
  184.            {
  185.            /*    try {
  186.                     br2.wait();
  187.                 } catch (InterruptedException ex) {
  188.                     Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  189.                 }*/
  190.                //br2.notify();
  191.                //socket.setSoTimeout(4* 1000);
  192.  
  193.                while ((buffer = br2.readLine())!=null)
  194.                {
  195.                    pw2.println(buffer);
  196.                    System.out.println(i+") "+buffer.length());
  197.                    try {
  198.                        Thread.sleep(100);//le puse este sleep solo para depurar
  199.                    } catch (InterruptedException ex) {
  200.                        System.out.println("Excepcion del sleep()");
  201.                        //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex);
  202.                    }
  203.                    i++;
  204.                }
  205.            }
  206.  
  207.            fw.close();
  208.        }
  209.        catch (IOException e)
  210.        {
  211.            System.out.println("timout liberado");
  212.            //e.printStackTrace();
  213.        }
  214.        finally
  215.        {
  216.            pw2.close();
  217.            //br2.close();
  218.        }
  219.    }
  220. }
  221.  
3  Programación / Programación C/C++ / chat con hilos + winsock en C en: 24 Enero 2012, 20:58 pm
Hola a todos:

Les cuento, ya tengo implementado un chat bidireccional hecha en winsok, para ello tuve que hacerlo con hilos de ejecucion, hasta el momento el programa no acepta mas de un cliente. Funciona bien, el problema es que se ve asi:



ocurre que se ve feo que ingrese los datos, y que este ahí mismo el historial de converzación, por eso tengo ganas de el mismo hilo me genere una ventana aparte donde pueda ingresar los datos y una ventana donde pueda ver los datos del historial de converzación, algo asi:



Lo mismo para el cliente.

Se que la existe una funcion llamada CreateProcess() que al pasarle un flag a la funcion, me genera otra ventana, pero lo que yo no quiero es ejecutar desde otro *.exe a otro *.exe. La idea es tener un solo ejecutable nomas. Ojalá alguien pueda ayudarme please!

saludOS!


4  Programación / Programación C/C++ / validacion de datos en C + getch() en windows y linux sin conio en: 17 Enero 2012, 16:11 pm
Hola a todos:

Voy hacer mi primer aporte en el foro. Se trata de unas funciones que sirven para validar datos de entradas, y unas cuantas macros. Tambien incluye la implementación del getch() que tanto conocemos, en windows y linux.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #ifdef WIN32
  5.    #include <windows.h>
  6.    #define NEWLINE      13
  7.    #define BACKSPACE    8
  8. #else
  9.    #include <termios.h>
  10.    #define NEWLINE      10
  11.    #define BACKSPACE    127
  12. #endif
  13.  
  14. #define TAM              20
  15. #define SPACE            32
  16. #define MIN_NUM          48
  17. #define MAX_NUM          57
  18. #define MIN_LETRA_MAY    65
  19. #define MAX_LETRA_MAY    95
  20. #define MIN_LETRA_MIN    97
  21. #define MAX_LETRA_MIN    122
  22.  
  23. char getch ( );
  24. void validar_letras (char *);
  25. void validar_numeros (int *);
  26.  
  27. int main (void)
  28. {
  29.  
  30.    char buffer[TAM];
  31.    int numero;
  32.  
  33.    printf ( "ingrese una cadena: " );
  34.    validar_letras (buffer);
  35.  
  36.    printf ( "\nla cadena ingresada es: %s\n", buffer );
  37.  
  38.    setbuf (stdin, NULL);
  39.  
  40.    printf ( "Ingrese un numero: " );
  41.    validar_numeros ( &numero );
  42.  
  43.    printf ( "\nEl numero ingresado es: %d\n", numero );
  44.  
  45.    return 0;
  46.  
  47. }
  48.  
  49. void validar_numeros (int *numero)
  50. {
  51.    int i;
  52.    char p[TAM], tecla;
  53.  
  54.    /*importante inicializar los valores
  55.     ya que la implementacion que sigue lo amerita*/
  56.    i = 0;
  57.    p[0] = '\0';
  58.  
  59.    do
  60.    {
  61.        tecla = getch ();//atrapa un caracter sin dejar un eco
  62.  
  63.        /*BACKSPACE es la tecla para eliminar un caracter
  64.         y el i obligaotiamente tiene que ser mayor que cero
  65.         ya que si entra al if y tiene valor cero, el valor de i
  66.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  67.        if ( i > 0 && tecla == BACKSPACE )
  68.        {
  69.            printf ( "\b \b" );
  70.            p[--i] = '\0';
  71.        }
  72.        else
  73.        {
  74.            /*rango de numeros y SPACE es el espacio*/
  75.            if ( (tecla >= MIN_NUM && tecla <= MAX_NUM)  ||
  76.                  tecla == SPACE || tecla == '-' )
  77.            {
  78.                /*obligamos a que no hayan mas de un guion, y que
  79.                 el guion este al principio*/
  80.                if ( tecla == '-' && i == 0 )
  81.                {
  82.                    printf ( "%c", tecla );
  83.                    p[i++] = tecla;
  84.                }
  85.                else
  86.                {
  87.                    if ( tecla != '-' )
  88.                    {
  89.                        printf ( "%c", tecla );
  90.                        p[i++] = tecla;
  91.                    }
  92.                }
  93.            }
  94.        }
  95.    } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM);
  96.    /* NEWLINE inidica el Enter, i tiene que ser menor
  97.     que TAM pues de lo contrario, estaría accediendo
  98.     a memoria no reservada*/
  99.    p[i] = '\0'; /*colocamos el fin de cadena*/
  100.    *numero = atoi (p);
  101.    /*convierte una cadena en un numero
  102.     10 quiere decir que está en base decimal*/
  103.  
  104.    return ;
  105. }
  106.  
  107. void validar_letras (char *p)
  108. {
  109.    int i;
  110.    char tecla;
  111.  
  112.    /*importante inicializar los valores
  113.     ya que la implementacion que sigue lo amerita*/
  114.    i = 0;
  115.    p[0] = '\0';
  116.  
  117.    do
  118.    {
  119.        tecla = getch ();//atrapa un caracter sin dejar un eco
  120.  
  121.        /*BACKSPACE es la tecla para eliminar un caracter o de retroceso
  122.         y el i obligaotiamente tiene que ser mayor que cero
  123.         ya que si entra al if y tiene valor cero, el valor de i
  124.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  125.        if ( i > 0 && tecla == BACKSPACE )
  126.        {
  127.            printf ( "\b \b" );
  128.            p[--i] = '\0';
  129.        }
  130.        else
  131.        {
  132.            /*rango de letras mayusculas y minusculas y SPACE es el espacio*/
  133.            if ( (tecla >= MIN_LETRA_MAY && tecla <= MAX_LETRA_MAY)  ||
  134.                 (tecla >= MIN_LETRA_MIN && tecla <= MAX_LETRA_MIN)  ||
  135.                  tecla == SPACE )
  136.            {
  137.                printf ( "%c", tecla );
  138.                p[i++] = tecla;
  139.            }
  140.        }
  141.    } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM);
  142.    /* NEWLINE inidica el Enter, i tiene que ser menor
  143.     que TAM pues de lo contrario, estaría accediendo
  144.     a memoria no reservada*/
  145.  
  146.    p[i] = '\0'; /*colocamos el fin de cadena*/
  147.  
  148.    return ;
  149. }
  150.  
  151. #ifdef WIN32
  152.  
  153. char getch ( )
  154. {
  155.    char car;
  156.    DWORD leidos, modo;
  157.  
  158.    GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo );
  159.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo &
  160.                     !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT );
  161.    ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL );
  162.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo );
  163.    return car;  
  164. }
  165.  
  166. #else
  167.  
  168. char getch ( )
  169. {
  170.  
  171.    struct termios _ter, fuente;
  172.    char car;
  173.  
  174.    if ( tcgetattr (fileno(stdin), &_ter) )
  175.    {
  176.        perror ( "Error para obtener información\n" );
  177.        return -1;
  178.    }
  179.  
  180.    fuente = _ter;
  181.  
  182.    _ter.c_lflag &= ~ICANON;
  183.    _ter.c_lflag &= ~ECHO;
  184.    _ter.c_cc[VMIN] = 1;
  185.    _ter.c_cc[VTIME] = 0;
  186.  
  187.    if ( tcsetattr (fileno(stdin), TCSANOW, &_ter) )
  188.    {
  189.        perror ( " Error para obtener información\n" );
  190.        return -1;
  191.    }
  192.  
  193.    car = getchar ( );
  194.  
  195.    if ( tcsetattr (fileno(stdin), TCSANOW, &fuente) )
  196.    {
  197.        perror ( "Error para obtener información" );
  198.        return -1;
  199.    }
  200.  
  201.    return car;
  202. }
  203. #endif
  204.  
  205.  

ojalá le sirva a alguien.

PD: este code lo publiqué en otro lado, por cualquier cosa.

saludos!



5  Programación / Scripting / Expresion regular en Perl en: 9 Enero 2012, 23:39 pm
Hola a todos:

Les cuento mi duda, pasa que quiero validar una espresion regular  y quiero que solo me reconozca el string en el alfabeto= {a, b}.

acá dejo el code. No se en que estoy fallando.

Código
  1. print "Ingrese nombre de usuario: ";
  2. $nombre=<STDIN>;
  3. chomp($nombre);
  4.  
  5. if ($nombre =~ m/[c-z]/ | $nombre !~ m/\w/ | $nombre =~ m/[0-9]/)
  6. {
  7. print "No pertenece al lenguaje\n";
  8. }
  9. else
  10. {
  11. print "Si pertenece\n";
  12. }
  13.  

Con esto solo me acepta el alfabeto [a,b] + caracteres especiales como por ejemplo +, - {. } !, --. Pero eso no es lo que quiero. Ayuda please!

Código
  1. print "Ingrese nombre de usuario: ";
  2. $nombre=<STDIN>;
  3. chomp($nombre);
  4.  
  5. if ($nombre =~ m/[c-z]/ | $nombre =~ /m[0-9]/)
  6. {
  7. print "No pertenece al lenguaje\n";
  8. }
  9. else
  10. {
  11. print "Si pertenece\n";
  12. }
  13.  
6  Programación / Programación C/C++ / winsock + winapi en C en: 10 Diciembre 2011, 01:08 am
Hola a toda la Comunidad, me presento soy bdoX y soy nuevo en el foro, he mirado varios temas y me doy cuenta de que en este foro hay gente muy capacitada :-). Bueno les cuento, hice un programa de envio de archivos en winsock (Windows) para consola en C, cuando quise pasar esa versión a winapi, me arrojaba errores de ejecución. ¿Alguien sabe si para programar winsock+winapi necesito usar hilos de ejecución? por algun lado de internet, decia que tenia que usar un hilo para montar la interfaz de usuario y otro hilo para montar el socket. Ojalá y alguien me pueda ayudar.

Saludos!!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines