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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18
131  Programación / Programación C/C++ / Re: Constructores de conversión y casteos. en: 24 Julio 2013, 14:25 pm
Gracias de nuevo por la respuesta.
Eso mismo me planteba yo ( la vision de la clase en memoria) por eso preguntaba si si habia alguna manera de llamar al constructor de la clase B durante el casteo para construirla bien pero veo que no,ok.

Sin embargo ahora mi pregunta es que pasa si la superclase es abstracta. Supongamos que tengo una superclase A y dos que heredan  C y D. Si defino un metodo que devuelve un puntero a A, si que puedo castear una superclase a una de sus clases derivadas sin problema. Esto es porq dentro del metodo he construido el objeto como una de laa clases derivadas ( necesariamente porque  esabstracta) ¿correcto?


Y si dentro deo metodo conatruyo la clase como B y tras delver el puntero mo casteo a C?
132  Programación / Programación C/C++ / Re: Constructores de conversión y casteos. en: 22 Julio 2013, 19:40 pm
Gracias por la respuesta.

Luego es imposible tener una superclase A, una clase derivada B, construir un objeto como clase A, y castearlo a clase B, es decir:

Código:
class A{};
class B: extends A{};

int main(){
   A *a=new A();

   B *b=dynamic_cast<B *>(a);
  //Esto da error.

  B *b2=static_cast<B *>(a);
//Esto no da error, el problema es que los atributos que incorpora 'B' no son    
//inicializados, a no ser que lo estubiesen ya.

//Tampoco hay manera de llamar a un constructor automaticamente al hacer ese
//static_cast para que las variables que incorpora 'B' sean inicializadas, ¿cierto?  

}        

Muchas Gracias

133  Programación / Programación C/C++ / Constructores de conversión y casteos. en: 22 Julio 2013, 16:56 pm
Hola a todos, intentaré ser lo mas conciso posible.

He leído y comprobado que en java no se puede hacer un cast de una superclase a una subclase, así que me propuse intentarlo en C++:

Al intentarlo observo que con static_cast, reinterpret_cast y al estilo C, compila y ejecuta, pero efectivamente los nuevos atributos de la clase derivada no son inicializados (yo pensaba que con estos castings se haría llamada al constructor apropiado, pero no es así). Obviamente, no funciona como debería.

¿Como puedo hacer para poder castear la superclase a una subclase con dynamic_cast y que todo se inicialice bien?

PD.
No se si se podrá pero, ¿sobrecargando dynamic_cast de alguna manera?

He intentado sobrecargar el operador '=' para que al hacer la asignación todo funcione bien. El problema ha sido que lo he hecho con referencias, para conseguir lo que quiero ¿tienen que ser punteros a la fuerza porque necesito polimorfismo?:
(El operador '=' hará cosas distintas si hago 'SuperClase=SuperClase' que si hago 'SuperClase=SubClase')


134  Programación / Programación C/C++ / Re: Duda con sockets C en: 17 Julio 2013, 18:20 pm
Gracias por las respuestas, lo intentaré con select().

No entiendo como verificarlo con un timeout, subo el código del server: (TCP)

Código:
int main(int argc, char **argv)
{
const int PORT=1234;
const int BACKLOG=256;
const int INET_ADDRLEN=256;
const int BUFFER_SIZE=256;

int fd,fd2,rec_size,pr;
unsigned int sin_size=sizeof(sockaddr_in);
char buffer[BUFFER_SIZE];
sockaddr_in server,client;
char ip_handled[INET_ADDRLEN];

if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){
exit(-1);
}

server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=INADDR_ANY;
for(int i=0;i<8;i++) server.sin_zero[i]=0;

if((bind(fd,(sockaddr *)&server,sizeof(sockaddr_in)))==-1){
exit(-1);
}

if((listen(fd,BACKLOG))==-1){
exit(-1);
}
while(1){
printf("Listening...\n");
if((fd2=accept(fd,(sockaddr *)&client,&sin_size))==-1){
printf("Error en accept()\n");
close(fd);
exit(-1);
}else{
pr=fork();
switch(pr){
case -1:
cout<<"Critical Error"<<endl;
close(fd);
close(fd2);
exit(-1);
break;
case 0:
printf("Client lstened \n");
if(inet_ntop(AF_INET,&(client.sin_addr),ip_handled,INET_ADDRLEN)==NULL){
printf("Error en inet_ntop()\n");
close(fd);
close(fd2);
exit(-1);
}else{
printf("Handling client %s at port %d\n",ip_handled,ntohs(client.sin_port));
}
if((rec_size=recv(fd2,buffer,BUFFER_SIZE,0))==-1){
printf("Error en lectura\n");
close(fd);
close(fd2);
exit(-1);
}
while(strcmp(buffer,"-1")!=0){
printf("Mensaje recivido: \n\t%s\n",buffer);
if(send(fd2,buffer,rec_size,0)==-1){
printf("Error en escritura\n");
}
if((rec_size=recv(fd2,buffer,BUFFER_SIZE,0))==-1){
printf("Error en lectura\n");
close(fd);
close(fd2);
exit(-1);
}
}
exit(0);
break;
default:
break;
}
}
}
exit(0);
}
135  Programación / Programación C/C++ / Duda con sockets C en: 17 Julio 2013, 02:55 am
Hola a todos.

Estoy aprendiendo a usar sockets en C. (UNIX)

Ya he conseguido hacer un servidor concurrente sin fijarme en ningún ejemplo pero me ha surgido un problema:

Para hacerlo concurrente uso fork(), tengo configurado el server para que lea datos del cliente hasta que éste le envíe un '-1'. Cuando los recive los saca por pantalla y los reenvia. Hasta aquí todo bien, pero el problema es que si finalizo el cliente en lugar de con un '-1' con "ctrl+c", el server entra en bucle infinito, no para de escribir el último mensaje que recibió del cliente.

Por ello he buscado formas de comprobar el estado de un socket, he encontrado la función select(), pero por lo que entiendo ésta comprueba el estado de los descriptores desde el 0 hasta el que le indiquemos menos uno. Yo necesito algún método que permita comprobar el estado de un solo descriptor.
¿Cómo puedo hacerlo?

Muchas gracias.

PD. No subo el código porque es bastante largo, si hace falta decidme y lo subo, o decidme como poner un spoiler que no sé xDD.
136  Foros Generales / Foro Libre / Duda con estudios: profesor o autodidacta? en: 13 Julio 2013, 18:11 pm
Hola a todos.

Discutía con un amigo sobre si merece la pena estudiar seguridad informática.
Éste está haciendo CFGS de informática (no se exactamente cual). El caso es que tiene un compañero que lleva desde pequeño interesándose por temas de seguridad, hacking etc. y debe de saber bastante. Dice que en clase de seguridad, este chaval sabe bastante mas que el profesor porque muchas veces le corrije etc. y que por eso cree que no merece la pena, porque probablemente los profesores no tendrán sus conocimientos actualizados etc.

Mi pregunta es si esto mismo es probable que pase estudiando un máster en seguridad informática, (en lugar de CFGS), de tal manera que no merezca la pena pagar lo que cuesta, y salga mejor ser autodidacta o estudiar por tu cuenta para las certificaciones.

PD. Las certificaciones (en el caso de la seguridad informática) sustituyen al máster o ambos pueden complementarse?

Gracias.
137  Programación / Programación C/C++ / Re: Problema con gethostbyname() y gethostbyaddr() en: 12 Julio 2013, 01:55 am
Lo he solucionado, como puedo borrar el post?
138  Programación / Programación C/C++ / Problema con gethostbyname() y gethostbyaddr() en: 12 Julio 2013, 01:15 am
Hola a todos.

Mi problema es que al usar gethostbyname() con algún nombre como "www.google.es" o cualquier url, luego el hostent que devuelve la función tiene mal puesta la IP, me explico:

Pongo "nslookup www.google.es" y me sale que su ip es 192.168.0.1 por ej.
Pero si hago "gethostbyname("www.google.es");" y luego saco por pantalla la lista de ips de la url en cuestión me salen caracteres chungos y cosas así.

¿Como se puede conseguir la direcc. IP de una url con C/C++?

EDITO: corregidme pero por lo que entiendo, de cara al eexterior google tendrá una direcc. IP y un puerto (por el protocolo NAT), en ese caso mi problema es que me estoy conectando a la IP que no es? De ser así, ¿como puedo conectarme a una IP/puerto con C?

Gracias.
139  Foros Generales / Dudas Generales / Duda con Arduino. Urgente por favor. en: 9 Julio 2013, 02:05 am
Hola a todos.

Mi duda es acerca de si, sabiendo C/C++ y Java (mas de c/c++), se puede programar en Arduino (proccesing creo) sin saber nada mas.
El motivo es por una oferta de trabajo.

Muchas gracias.
140  Programación / Programación C/C++ / Re: Duda con structs C/C++ en: 21 Junio 2013, 18:09 pm
Gracias por las respuestas, sobre todo la del memcpy, muy interesante, no sabía que existiese esa función, gracias.

Pero supongamos que hago una funcion que devuelva un hostent*, en el cuerpo de esta función podría reservar memoria con malloc, y después usar el memcpy() sin necesidad de declarar y vector ¿cierto?

Otra cosa, si la estructura tiene dentro punteros, al usar memcpy(), ¿estos punteros apuntan correctamente no?, es decir, si tengo 2 vectores a y b, uno de tam. 20 y otro de tam. 40, en ese caso tras usar memcpy(), mis nuevos a y b tendrán también 20 y 40 de tamaño, ¿cierto?

Saludos y gracias de nuevo.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines