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

#1
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 (actionscript) [Seleccionar]


//La funcion a pasar
public function Hola():void{
  trace("Hola mundo");
}

//Esta funcion ejecuta la funcion pasada en su parametro
public function Saluda(parametro:Function):void{
   parametro();
}

//Ejecutamos la funcion "Saluda" pasandole como parametro el nombre de la funcion "Hola" sin parentesis
Saluda(Hola);



Resultado en consola "Hola mundo"
#2
Programación C/C++ / Servidor de sockets en c
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.



#include<stdio.h>
#include<string.h>    //strlen
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>    //write

int main(int argc , char *argv[])
{
    int socket_desc , new_socket , c;
    struct sockaddr_in server , client;
    char *message , buffer[2000];
int read_size;

     
    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
     
    //Prepare the sockaddr_in structure
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 843 );
     
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("bind failed");
        return 1;
    }
    puts("bind done");
     
    //Listen
    listen(socket_desc , 5);
     
    //Accept and incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);

while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) ){

           puts("Conexion establecida al servicio de crossdomain policy");
      //Miramos que nos dice el cliente
     //memset(buffer, '\0', sizeof( buffer ));
   memset(buffer, 0, 2000);
   // read_size = recv(new_socket , buffer , 20 , 0);

   //Receive a message from client
    while( (read_size = recv(new_socket , buffer , 2000 , 0)) > 0 ){
                   //Send the message back to client
     puts(buffer);
                     
  if(strcmp(buffer, "<policy-file-request/>")==0){//Si concuerda con la cadena "<policy-file-request/>" enviamos el cossdoamain al cliente
                        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>";
                        write(new_socket , message , strlen(message));
              }
  write(new_socket , buffer , strlen(buffer));
  memset(buffer, 0, 2000);
                }
   
   if(read_size == 0){
             puts("Client disconnected");
             fflush(stdout);
           }else if(read_size == -1){
             perror("recv failed");
           }
    }//End While 
    if (new_socket<0){
        perror("accept failed");
        return 1;
    }
     
    return 0;
}