|
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. package Mensaje; import java.io.*; import java.net.*; import java.util.*; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; /** * Mensaje para pedir un fichero. */ public class DameFichero { public DameFichero (Socket socket ) { this.socket = socket; } { try { // Apertura del fichero y creacion de BufferedReader para poder // hacer una lectura comoda (disponer del metodo readLine()). archivo = new File (nombreFileNotas ); archivoResultado = new FileWriter("resul_"+nombreFileNotas ); // Lectura del fichero int contador = 0; //leemos las lineas que no nos sirven para calcular las notas linea=br.readLine(); linea=br.readLine(); linea=br.readLine();//en esta linea los nombres de las columnas pw.println(linea+"\tPromedio_final");// le agregamos una ultima colum while((linea=br.readLine())!=null) { try { //filtramos por tokens float C1, C2, C3, NE; //quitamos los tokens que no nos sirven for (int i = 0; i < 3; i++) st.nextToken(); C1 = Float. parseFloat(st. nextToken()); C2 = Float. parseFloat(st. nextToken()); C3 = Float. parseFloat(st. nextToken()); NE = Float. parseFloat(st. nextToken()); //escribimos la nota al final de cada columna pw.println(linea+"\t"+Redondear(getNotaFinal(C1,C2,C3,NE))); } { System. out. println("problemas con el numero flotante"); e.printStackTrace(); } } } e.printStackTrace(); } finally { // En el finally cerramos el fichero, para asegurarnos // que se cierra tanto si todo va bien como si salta // una excepcion. try { fr.close(); br.close(); pw.close(); } e2.printStackTrace(); } } return "resul_"+nombreFileNotas; } public void EnviarArchivo (String nombreArchivo ) { try { // Creamos el archivo que vamos a enviar if(!archivo.exists()) { System. out. println("El archivo a "+nombreArchivo +" no existe"); return ; } // Obtenemos el tamaño del archivo int tamañoArchivo = (int)archivo.length(); File filenombreArchivo = new File(nombreArchivo ); // Creamos flujo de entrada para realizar la lectura del archivo en bytes int i = 1; pw1 = new PrintWriter(this. socket. getOutputStream(), true); System. out. println("El tamaño del archivo a enviar: "+tamañoArchivo ); /* synchronized (pw1) { */ while((buffer=br1.readLine())!=null) { pw1.println(buffer); System. out. println(i +") "+buffer. length()); try { Thread. sleep(100);//le puse este sleep para depurar System. out. println("Excepcion del sleep()"); //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } i++; } // pw1.notify(); //} fr.close(); } { System. err. println(e. toString()); } finally { try { br1.close(); //pw1.close(); } Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } } } public void RecibirArchivo (String nombreArchivo, int tam ) { try { int i = 1; File filenombreArchivo = new File(nombreArchivo ); this.socket.getInputStream())); //synchronized (br2) { /* try { br2.wait(); } catch (InterruptedException ex) { Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); }*/ //br2.notify(); //socket.setSoTimeout(4* 1000); while ((buffer = br2.readLine())!=null) { pw2.println(buffer); System. out. println(i +") "+buffer. length()); try { Thread. sleep(100);//le puse este sleep solo para depurar System. out. println("Excepcion del sleep()"); //Logger.getLogger(DameFichero.class.getName()).log(Level.SEVERE, null, ex); } i++; } } fw.close(); } { System. out. println("timout liberado"); //e.printStackTrace(); } finally { pw2.close(); //br2.close(); } } }
|
|
|
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. #include <stdio.h> #include <stdlib.h> #ifdef WIN32 #include <windows.h> #define NEWLINE 13 #define BACKSPACE 8 #else #include <termios.h> #define NEWLINE 10 #define BACKSPACE 127 #endif #define TAM 20 #define SPACE 32 #define MIN_NUM 48 #define MAX_NUM 57 #define MIN_LETRA_MAY 65 #define MAX_LETRA_MAY 95 #define MIN_LETRA_MIN 97 #define MAX_LETRA_MIN 122 void validar_letras (char *); void validar_numeros (int *); int main (void) { char buffer[TAM]; int numero; printf ( "ingrese una cadena: " ); validar_letras (buffer); printf ( "\nla cadena ingresada es: %s\n", buffer ); printf ( "Ingrese un numero: " ); validar_numeros ( &numero ); printf ( "\nEl numero ingresado es: %d\n", numero ); return 0; } void validar_numeros (int *numero) { int i; char p[TAM], tecla; /*importante inicializar los valores ya que la implementacion que sigue lo amerita*/ i = 0; p[0] = '\0'; do { tecla = getch ();//atrapa un caracter sin dejar un eco /*BACKSPACE es la tecla para eliminar un caracter y el i obligaotiamente tiene que ser mayor que cero ya que si entra al if y tiene valor cero, el valor de i decrementará y p tendría un subindice -1, "p[-1]"¿?*/ if ( i > 0 && tecla == BACKSPACE ) { p[--i] = '\0'; } else { /*rango de numeros y SPACE es el espacio*/ if ( (tecla >= MIN_NUM && tecla <= MAX_NUM) || tecla == SPACE || tecla == '-' ) { /*obligamos a que no hayan mas de un guion, y que el guion este al principio*/ if ( tecla == '-' && i == 0 ) { p[i++] = tecla; } else { if ( tecla != '-' ) { p[i++] = tecla; } } } } } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM); /* NEWLINE inidica el Enter, i tiene que ser menor que TAM pues de lo contrario, estaría accediendo a memoria no reservada*/ p[i] = '\0'; /*colocamos el fin de cadena*/ /*convierte una cadena en un numero 10 quiere decir que está en base decimal*/ return ; } void validar_letras (char *p) { int i; char tecla; /*importante inicializar los valores ya que la implementacion que sigue lo amerita*/ i = 0; p[0] = '\0'; do { tecla = getch ();//atrapa un caracter sin dejar un eco /*BACKSPACE es la tecla para eliminar un caracter o de retroceso y el i obligaotiamente tiene que ser mayor que cero ya que si entra al if y tiene valor cero, el valor de i decrementará y p tendría un subindice -1, "p[-1]"¿?*/ if ( i > 0 && tecla == BACKSPACE ) { p[--i] = '\0'; } else { /*rango de letras mayusculas y minusculas y SPACE es el espacio*/ if ( (tecla >= MIN_LETRA_MAY && tecla <= MAX_LETRA_MAY) || (tecla >= MIN_LETRA_MIN && tecla <= MAX_LETRA_MIN) || tecla == SPACE ) { p[i++] = tecla; } } } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM); /* NEWLINE inidica el Enter, i tiene que ser menor que TAM pues de lo contrario, estaría accediendo a memoria no reservada*/ p[i] = '\0'; /*colocamos el fin de cadena*/ return ; } #ifdef WIN32 { char car; DWORD leidos, modo; GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo ); SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo & !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT ); ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL ); SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo ); return car; } #else { struct termios _ter, fuente; char car; if ( tcgetattr (fileno(stdin), &_ter) ) { perror ( "Error para obtener información\n" ); return -1; } fuente = _ter; _ter.c_lflag &= ~ICANON; _ter.c_lflag &= ~ECHO; _ter.c_cc[VMIN] = 1; _ter.c_cc[VTIME] = 0; if ( tcsetattr (fileno(stdin), TCSANOW, &_ter) ) { perror ( " Error para obtener información\n" ); return -1; } if ( tcsetattr (fileno(stdin), TCSANOW, &fuente) ) { perror ( "Error para obtener información" ); return -1; } return car; } #endif
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. print "Ingrese nombre de usuario: "; $nombre=<STDIN>; if ($nombre =~ m/[c-z]/ | $nombre !~ m/\w/ | $nombre =~ m/[0-9]/) { print "No pertenece al lenguaje\n"; } else { }
Con esto solo me acepta el alfabeto [a,b] + caracteres especiales como por ejemplo +, - {. } !, --. Pero eso no es lo que quiero. Ayuda please! print "Ingrese nombre de usuario: "; $nombre=<STDIN>; if ($nombre =~ m/[c-z]/ | $nombre =~ /m[0-9]/) { print "No pertenece al lenguaje\n"; } else { }
|
|
|
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!!
|
|
|
|
|
|
|