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


  Mostrar Mensajes
Páginas: [1]
1  Programación / Java / Re: Pasar nombre de funcion como parametro de otra funcion en java en: 1 Agosto 2014, 01:41 am
Gracias por la respuesta, la verdad es que ese resultado ya lo habia encontrado buscando por internet, pero no acabo de entenderlo, al parecer de los varios ejemplos que aparecen el mas sencillo a simple vista es el de callable pero no acabo de comprender su funcionamiento.

Si alguien me puede poner un ejemplo practico seria de agradecer.

La idea es poder pasar funciones entre clases, osea si tengo una clase A y una clase B quiero poder pasarle la funcion de la clase A a la clase B para que esta la ejecute. y no me sirve pasar la referencia de la clase A con this porque de esta manera necesito saber de antemano el nombre de las funciones y estas pueden ser variables o estar metidas en un array de funciones.
2  Programación / Java / Pasar nombre de funcion como parametro de otra funcion en java en: 31 Julio 2014, 18:54 pm
Hola amigos, estoy aprendiendo java y me gustaria saber si puedo pasar una funcion como parametro de otra funcion de una manera sencilla, que no complique el codigo.

es decir hay algo parecido o equivalente en java a algo tan bonito como lo siguiente?:

Código
  1.  
  2. //La funcion a pasar
  3. public function Hola():void{
  4.   trace("Hola mundo");
  5. }
  6.  
  7. //Esta funcion ejecuta la funcion pasada en su parametro
  8. public function Saluda(parametro:Function):void{
  9.    parametro();
  10. }
  11.  
  12. //Ejecutamos la funcion "Saluda" pasandole como parametro el nombre de la funcion "Hola" sin parentesis
  13. Saluda(Hola);
  14.  
  15.  

Resultado en consola "Hola mundo"
3  Programación / Programación C/C++ / Re: Servidor de sockets en c en: 18 Julio 2014, 18:04 pm
Gracias creo que optare por remirarme tanto c++ como java y luego decidiré, en cuanto a node.js la verdad es que me atrae el tema del control de los hilos mediante eventos pero sinceramente no me gusta javascript, es feo y malo de narices, en fin no me gusta para la web así que menos para el servidor, lástima que tengamos que tragarlo por fuerza.

además no veo un sistema de inicio claro en la instalación de node.js como por ejemplo c que tan solo tuve que poner en mi vps centos una línea para instalar el compilador gcc y a funcionar los programas con ./programa.out, no tuve que tocar nada más.

Espero que nadie se ofenda 

Gracias de nuevo y un salúdate.
4  Programación / Programación C/C++ / Re: Servidor de sockets en c en: 13 Julio 2014, 21:42 pm
Hola gracias por los comentarios, en realidad me estoy planteando, montarlo en java en vez de en c que por lo visto tambien puedo hacerlo correr en linux, ya que veo que en java practicamente todas estas cosas de bajo nivel estan axtraidas. no quiero hacerme la vida imposible con el servidor de sockets porque luego me quedara toda la programacion por parte del cliente/juego que es donde quiero invertir el tiempo.

Osea me gustaria un lenguaje parecido a algo que ya conociera de alto nivel como js, php, as3
(ya monte un servidor de sockets en php y no me convencio, tambien lo monte en adobe air pero no puedo instarlo en el vps porque ya no tiene soporte para linux, aunque podria instalarlo en uno windows pero el precio se dispara)

Asi que, que me recomiendan para crear un proceso de sockets para linux? java o c++?
5  Programación / Programación C/C++ / Re: Servidor de sockets en c en: 11 Julio 2014, 16:40 pm
Hola MeCraniDOS, gracias por tu respuesta al final me ha funcionado con tus correcciones, gracias :)
Sinceramente vengo de lenguajes de alto nivel como js,php,as3,vb y c# y me cuesta mucho entender cosas como los punteros o por ejemplo me choca que no pueda comparar 2 cadenas tal cual en fin tiene mucha telita el c. supongo que al disponer de acceso a más bajo nivel se tiene más control pero para los cabeza duras como yo se nos hace un mundo.

Ya que estoy aprovecho para preguntar algunas cosillas, yo ahora mismo estoy programando en c con el notepad++ desde windows, cada vez que realizo algún cambio en el programa y quiero probarlo tengo que subirlo al ftp del vps(centos) después desde el putty lo compilo, mato el proceso del programa anterior desde el power panel y vuelvo a ejecutar el actualizado desde el putty para poder después probar el cambio realizado en el programa.

La pregunta es, hay alguna manera desde windows que yo pueda debuguear el servidor de sockets sin tener que hacer todos esos pasos cada vez que hago un cambio?
y para terminar, antes de seguir con el servidor de sockets en c me recomiendan algún otro lenguaje de más alto nivel para hacer el servidor de sockets pero que se ejecute desde linux como lo hace el c?
Bueno pues eso es todo, gracias y si sigo con el c seguramente iré viniendo más a menudo a visitarles jeje
Aquí dejo el código final de la duda anterior por si a alguien le sirve


Código
  1. #include<stdio.h>
  2. #include<string.h>    //strlen
  3. #include<sys/socket.h>
  4. #include<arpa/inet.h> //inet_addr
  5. #include<unistd.h>    //write
  6.  
  7. int main(int argc , char *argv[]){
  8.  
  9. int SOCKET_MASTER;
  10. int SOCKET_CLIENT;
  11. int sockAddrClientLen;
  12. int read_size;
  13.  
  14.    struct sockaddr_in structServer;
  15. struct sockaddr_in structClient;
  16.  
  17. char xml_message[] = "<?xml version=\"1.0\"?><!DOCTYPE cross-domainpolicy- SYSTEM \"http://www.adobe.com/xml/dtds/crossdomain.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>";
  18. char error_message[] = "No se a enviado el xml porque no coincide el comando, la cadena recibida a sido:\n";
  19. char buffer[2000];
  20.      /*
  21. * Creamos el SOCKET_MASTER
  22.  */
  23.    if ((SOCKET_MASTER = socket(AF_INET , SOCK_STREAM , 0)) == -1){
  24.        printf("Could not create socket");
  25.    }
  26.      /*
  27. * Cumplimentamos los valores de configuracion de la estructrua sockaddr_in
  28.  */
  29.    structServer.sin_family      = AF_INET;
  30.    structServer.sin_addr.s_addr = INADDR_ANY;
  31.    structServer.sin_port        = htons( 843 );
  32.      /*
  33. * Enlazamos el socket master a la ip y el puerto especificado en la estructura del server
  34.  */
  35.    if( bind(SOCKET_MASTER,(struct sockaddr *)&structServer , sizeof(structServer)) < 0){
  36.        puts("Fallo en el enlace/Bind");
  37.        return 1;
  38.    }else{
  39.        puts("Enlace realizado");
  40. }
  41.      /*
  42. * Ponemos el socket a la escucha y con un maximo de 5 clientes en espera
  43.  */  
  44.    listen(SOCKET_MASTER , 5);
  45.    puts("Esperando conexiones entrantes...");
  46.   /*
  47. * Ponemos el socket a la escucha y con un maximo de 5 clientes en espera
  48.  */
  49.    sockAddrClientLen = sizeof(struct sockaddr_in);
  50.  /*
  51. * Comprobamos mediante un bucle si se conecta algun cliente por el socket_master, si es asi aceptamos la conexion y creamos un nuevo socket para el cliente
  52.  */
  53. while( (SOCKET_CLIENT = accept(SOCKET_MASTER, (struct sockaddr *)&structClient, (socklen_t*)&sockAddrClientLen)) ){
  54.  
  55.   puts("Conexion establecida al servicio de crossdomain policy");
  56.       //Inicializamos el buffer a 0
  57.   memset(buffer, 0, 2000);
  58.   //Comprovamos si el cliente conectado nos envia algun dato
  59.  
  60.   while( (read_size = recv(SOCKET_CLIENT , buffer , 2000 , 0)) > 0 ){
  61.               //Mostramos en consola/putty el mensaje del cliente
  62.   puts(buffer);
  63.   //Comparamos si el mensaje enviado por el cliente coinciden los 20 primeros digitos con la siguiente cadena -> <policy-file-request/>
  64.   if(strcmp(buffer, "<policy-file-request/>")==0){
  65.                    //Si coincide le enviamos al cliente el xml
  66.                    write(SOCKET_CLIENT , xml_message , strlen(xml_message));
  67.        }else{
  68.    //Si no coicide avisamos al cliente y le devolvemos tambien lo que nos envio el
  69. write(SOCKET_CLIENT , error_message , strlen(error_message));
  70. write(SOCKET_CLIENT , buffer , strlen(buffer));
  71. }
  72. //Reiniciamos a 0 el buffer
  73.    memset(buffer, 0, 2000);
  74.            }//End While read_size
  75.  
  76.   if(read_size == 0){
  77.             puts("Cliente desconectado");
  78.             fflush(stdout);//Forzamos a mostrase la cadena del buffer en consola
  79.           }else if(read_size == -1){
  80.             perror("Error en recv");
  81.           }
  82.    }//End While SOCKET_CLIENT
  83.  
  84.    if (SOCKET_CLIENT<0){
  85.        perror("Error al Aceptar el nuevo Cliente/Socket");
  86.        return 1;
  87.    }
  88.  
  89.    return 0;
  90. }



MeCraniDOS  cante victoria demasiado pronto, al ver que me devolvia el xml di por sentado que ya funcionava bien, pero el problema ahora es que mande lo que mande desde el telnet al servidor el servidor me devuelve el xml y solo me lo tiene que devolver si yo le mando la cadena <policy-file-request/>


PD: ya esta solucionado xd en la linea 70 estaba enviando nuevamente la variable xml_message y tenia que poner la variable error_message, ya esta corregido en el codigo.



Bueno pues sigue fallando... la que estoy liando qie si va que si no va.. en fin.

Ahora cuando envio una cadena desde telnet por ejemplo "hola"

en la consola muestra primero la primera lentra en una linea y el restro de la frase en la otra


por ejemplo:

h
ola

Sin envio "elhacker"

en consola me aparece

e
lhacker

supomngo que por eso cuando envio "<policy-file-request/>"
la sentencia if no se cumple y no me envia el xml

porque en vez de llegar al buffer la cadena "<policy-file-request/>" llega primero el "<" y luego el resto "policy-file-request/>"

es como si la linea del -> while( (read_size = recv(SOCKET_CLIENT , buffer , 2000 , 0)) > 0 ){

leiera el primer caracter del comando recibido y lo enviara y despues leiera el resto del comando


Si envio el comando desde telnet precedido por un espacio o alguna letra entonces funciona

por ejemplo:

x<policy-file-request/>

el servidor muestra en una linea la x y en la siguiente el resto

x
<policy-file-request/>

Entonces como se cumple la sentencia me devuelve el xml

Alguien sabe a que es debido ese comportamiento, porque el servidor corta la primera letra del resto de la cadena y lo muestra por separado?



 Bueno espero que esta sea la ultima vez que digo que ya funciona bien y luego no..

En principio el problema venia por hacer las pruebas desde telnet, no me pregunteis porque, porque no tengo ni puñetera idea.

La cuestion es que he creado un cliente en flash me conectado y funciona a las mil maravillas

Saludos
6  Programación / Programación C/C++ / Servidor de sockets en c en: 10 Julio 2014, 23:04 pm
Hola amigos estoy intentando de hacer un servidor de sockets en c bajo linux y bueno sinceramente no tengo mucha idea de c y me cuesta bastante entenderlo, ya no tengo capacidad para aprender un lenguaje de tan bajo nivel.
Bueno a lo que iba solo quiero aprender lo que implica de un servidor de sockets para poder hacer un servidor para un juego, bueno en realidad serán 2 servidores un para el juego y el otro para servir un crossdomain.xml

De momento he empezado a hacer pruebas con el servidor encargado de servir el xml la lógica consiste en lo siguiente, el cliente se conecta al servidor de xml al puerto 843 y le manda una cadena, el servidor comprueba dicha cadena y si la cadena coincide le contesta con un xml, una vez el cliente tiene el xml se desconecta automáticamente de ese servidor y se conecta al servidor del juego, el problema reside en que no me devuelve el xml.

Para probar el servidor lo que hago de momento es conectarme a través de telnet y una vez conectado le envió la cadena "<policy-file-request/>" y el servidor debería enviarme el xml, pero no me lo devuelve

en la consola de putty puedo ver mediante el comando put() como la cadena que yo le envió al servidor le llega de la siguiente manera.

<
policy-file-request/>

El primer carácter lo muestra en una línea y el resto de la cadena en la siguiente, no sé si esto puede llegar a afectar en algo.

A mí en cambio en la consola de telnet el servidor me devuelve la cadena que yo le envié de manera correcta <policy-file-request/> pero me tendría que devolver también el xml

En definitiva el siguiente if no se está cumpliendo   if(strcmp(buffer, "<policy-file-request/>")==0){



El código de ejemplo que estoy utilizando es este, agradezco cualquier corrección o ayuda.


Código
  1. #include<stdio.h>
  2. #include<string.h>    //strlen
  3. #include<sys/socket.h>
  4. #include<arpa/inet.h> //inet_addr
  5. #include<unistd.h>    //write
  6.  
  7. int main(int argc , char *argv[])
  8. {
  9.    int socket_desc , new_socket , c;
  10.    struct sockaddr_in server , client;
  11.    char *message , buffer[2000];
  12. int read_size;
  13.  
  14.  
  15.    //Create socket
  16.    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
  17.    if (socket_desc == -1)
  18.    {
  19.        printf("Could not create socket");
  20.    }
  21.  
  22.    //Prepare the sockaddr_in structure
  23.    server.sin_family = AF_INET;
  24.    server.sin_addr.s_addr = INADDR_ANY;
  25.    server.sin_port = htons( 843 );
  26.  
  27.    //Bind
  28.    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
  29.    {
  30.        puts("bind failed");
  31.        return 1;
  32.    }
  33.    puts("bind done");
  34.  
  35.    //Listen
  36.    listen(socket_desc , 5);
  37.  
  38.    //Accept and incoming connection
  39.    puts("Waiting for incoming connections...");
  40.    c = sizeof(struct sockaddr_in);
  41.  
  42. while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) ){
  43.  
  44.           puts("Conexion establecida al servicio de crossdomain policy");
  45.      //Miramos que nos dice el cliente
  46.     //memset(buffer, '\0', sizeof( buffer ));
  47.   memset(buffer, 0, 2000);
  48.   // read_size = recv(new_socket , buffer , 20 , 0);
  49.  
  50.   //Receive a message from client
  51.    while( (read_size = recv(new_socket , buffer , 2000 , 0)) > 0 ){
  52.                   //Send the message back to client
  53.     puts(buffer);
  54.  
  55.  if(strcmp(buffer, "<policy-file-request/>")==0){//Si concuerda con la cadena "<policy-file-request/>" enviamos el cossdoamain al cliente
  56.                        message = "<?xml version=\"1.0\"?><!DOCTYPE cross-domainpolicy- SYSTEM \"http://www.adobe.com/xml/dtds/crossdomain.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>";
  57.                        write(new_socket , message , strlen(message));
  58.              }
  59.  write(new_socket , buffer , strlen(buffer));
  60.  memset(buffer, 0, 2000);
  61.                }
  62.  
  63.   if(read_size == 0){
  64.             puts("Client disconnected");
  65.             fflush(stdout);
  66.           }else if(read_size == -1){
  67.             perror("recv failed");
  68.           }
  69.    }//End While  
  70.    if (new_socket<0){
  71.        perror("accept failed");
  72.        return 1;
  73.    }
  74.  
  75.    return 0;
  76. }
  77.  
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines