¿Problema con srand()?

Iniciado por Marovingio, 15 Septiembre 2010, 05:23 AM

0 Miembros y 1 Visitante están viendo este tema.

Marovingio

  Bueno estoy haciendo un proyecto en VC++ 2008, y este modulo lo estoy probando en builder para luego meterlo al proyecto en VC++, por la cuestion de las gui  :silbar: ....

Cuando el programa se ejecuta genera una serie de Ips Aleatorias, lo cierro y cuando lo vuelvo a ejecutar genera las mismas Ips Aleatorias como veran en la grafica ....

 


 

 Si el programa nunca se cerrara y la pc siempre estuviera conectada no habria problema pero si la apagan y la encienden el programa escaneara las mismas Ips y como veran eso no me sirve.......

 Aqui el code:

  void __fastcall TForm18::Button1Click(TObject *Sender)
{

AnsiString Host;
in_addr *o;
char *p;
hostent* hp;
int ban,exitcode;
WSADATA wsadata;
if (WSAStartup(MAKEWORD(1, 0), &wsadata) != 0)
ban= 0;
else
 {
  for(int i=0;i<=20;i++)
 {
 try
{
 Host=AnsiString(rand()%256)+"."+AnsiString(rand()%256)+"."+AnsiString(rand()%256)+"."+AnsiString(rand()%256);
 hp = gethostbyname(Host.c_str() );

 }
  catch(...)
 {
  hp = NULL;
 }
  if (hp == NULL)
int g=0;//Memo1->Lines->Add(Host+" No existe");
  else
{
if(EsacnearIPX(Host))
  Memo1->Lines->Add(Host+" Puerto 80 Disponible");
else
  Memo1->Lines->Add(Host+" Puerto 80 Cerrado");
}

  }
  }
WSACleanup( );
}


 Las funciones random() y randomize() de stdlib.h me andan en Builder pero en Vc++ me dice algo asi como libreria desconocida, me inmagino que estas funciones usan la funcion rand() y por lo tanto tendre resultados similares, al parecer rand() genera numeros aleatorios a partir de datos del programa y por eso siempre es la misma frecuencia ....

 Necesito ayuda en esto especificamente en una manera de que el programa genere Ips aleatorias diferentes en cada ejecucion, estuve pensando en algo como:

 (GetTickCount()%256*rand()%256)%256;

 Pero no se si me funcione ...

 Alguna ayuda ..  :)

  PD: Mastico algo de Asm inline asi que una solucion por esta via me servira  :)

Littlehorse

Código (cpp) [Seleccionar]
srand(time(NULL));

srand
time


CitarFor every different seed value used in a call to srand, the pseudo-random number generator can be expected to generate a different succession of results in the subsequent calls to rand.
Two different initializations with the same seed, instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.

Igualmente si el proyecto es lo suficientemente serio tal vez debas considerar utilizar PRNG mas robustos.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Marovingio

  Perfecto ahora si funciona bien .....

  Gracias Littelhorse   :D

Littlehorse

An expert is a man who has made all the mistakes which can be made, in a very narrow field.