Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Utenti Connessi in C
Forum - C/C++ - Utenti Connessi in C

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
joker_ (Ex-Member)
Pro


Messaggi: 182
Iscritto: 14/02/2005

Segnala al moderatore
Postato alle 23:54
Sabato, 26/03/2005
ragazzi ho creato un piccolo programma in C che rivela gli utenti connessi, ma c'? un problema di logica che non riesco a trovare:

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <time.h>
#define NOME_FILE "uc.bin"
#define ERRORE_USCITA "Utenti connessi: 1"

struct strDati {
char ipUtente[20];
int oraAccesso;
};

typedef struct strContDati {
  struct strDati impoUtente;
  struct strContDati* pStesso;
} impoUtenti;

void liberaMemoria(impoUtenti*);

FILE* fp=NULL;
int contaUtenti=0;
int verificaUtente=0;

int main(int argc, char *argv[]) {

  // dati necessari dell'utente
  char* ipUtenteTmp="139.0.0.1"; //getenv("REMOTE_ADDR");
  int oraAccessoTmp=time('\0');

  impoUtenti*  Lista=(impoUtenti*)malloc(sizeof(impoUte
nti));
  impoUtenti* cLista=Lista;

  printf("content-type:text/html\n\n");
  // esci se non ci sono i dati necessari
  if(!ipUtenteTmp) {
   printf("%s", ERRORE_USCITA);
   free(Lista);
   exit(1);
  }

  if((fp=fopen(NOME_FILE, "rb"))==NULL) {
   printf("%s", ERRORE_USCITA);
   free(Lista);
   exit(1);
  }

  if(!feof(fp)) {

   while(!feof(fp)) {
    fread(Lista, sizeof(impoUtenti), 1, fp);
    if(!strcmp(Lista->impoUtente.ipUtente, ipUtenteTmp)) {
     Lista->impoUtente.oraAccesso=oraAccessoTmp;
     verificaUtente=1;
    }

    if(!feof(fp)) {
     Lista-> pStesso=(impoUtenti*)malloc(sizeof(impoU
tenti));
     Lista=Lista->pStesso;
    } else {
     Lista->pStesso=NULL;
    }

   }

  } else {
   strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp);
   Lista->impoUtente.oraAccesso=oraAccessoTmp;
   Lista->pStesso=NULL;
   verificaUtente=1;
  }

  if(!verificaUtente) {
   Lista-> pStesso=(impoUtenti*)malloc(sizeof(impoU
tenti));
   Lista=Lista->pStesso;
   strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp);
   Lista->impoUtente.oraAccesso=oraAccessoTmp;
   Lista->pStesso=NULL;
  }

  fclose(fp);
  Lista=cLista;
  fp=NULL;
  fp=fopen(NOME_FILE, "wb");

  while(Lista!=NULL) {
   if(Lista->impoUtente.oraAccesso>(oraAccessoTmp-6000)) {
    fwrite(Lista, sizeof(impoUtenti), 1, fp);
    contaUtenti++;
   }
   Lista=Lista->pStesso;
  }
  fclose(fp);

  printf("Utenti connessi: %d", contaUtenti);

  Lista=cLista;
  liberaMemoria(Lista);
  system("pause");
  return 0;
}

void liberaMemoria(impoUtenti* pTmp) {
impoUtenti* tLista=NULL;

while(pTmp!=NULL) {
  tLista=pTmp->pStesso;
  free(pTmp);
  pTmp=tLista;
}
return;
}


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 13:10
Domenica, 27/03/2005
Se magari mi dici che tipo di errore ti ritorna, forse evito di cercare l'errore in tutto il codice ;)


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
joker_ (Ex-Member)
Pro


Messaggi: 182
Iscritto: 14/02/2005

Segnala al moderatore
Postato alle 14:41
Domenica, 27/03/2005
Piero ho risolto, per? l'ho fatto di nuovo
Posto, poi carico il mio lavoro nella sezione C/C++

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <time.h>

#define NOME_FILE "uc.bin"
#define ERRORE_USCITA "C\'? un solo utente connesso"

int verificaIp(char* IPTmp);

struct strDati {
  char ipUtente[80];
  int oraAccesso;
};

typedef struct strContDati {
struct strDati impoUtente;
struct strContDati* pStesso;
} impoUtenti;

void liberaMemoria(impoUtenti*);

FILE* fp=NULL;
int contaUtenti=0;
int verificaUtente=0;

int main(int argc, char *argv[]) {

  char* ipUtenteTmp=getenv("REMOTE_ADDR"); // "127.0.0.1";
  int oraAccessoTmp=time('\0');

  impoUtenti* Lista=(impoUtenti*)malloc(sizeof(impoUtenti));
  impoUtenti* cLista=Lista;

  printf("content-type:text/html\n\n");
  if(!ipUtenteTmp) {
   printf("%s", ERRORE_USCITA);
   free(Lista);
   exit(1);
  }

  fp=fopen(NOME_FILE, "rb");

  if(fp==NULL) {
   printf("%s", ERRORE_USCITA);
   free(Lista);
   exit(1);
  }

  while(!feof(fp)) {

   fread(Lista, sizeof(impoUtenti), 1, fp);

   if(verificaIp(Lista->impoUtente.ipUtente)) {
    strcpy(Lista->impoUtente.ipUtente, Lista->impoUtente.ipUtente);
    if(!strcmp(Lista->impoUtente.ipUtente, ipUtenteTmp)) {
     Lista->impoUtente.oraAccesso=oraAccessoTmp;
     verificaUtente=1;
    }
    else {
     Lista->impoUtente.oraAccesso=Lista->impoUtente.oraAccesso;
    }


    if(!feof(fp)) {
     Lista->pStesso=(impoUtenti*)malloc(sizeof(impoUtenti));
     Lista=Lista->pStesso;
    }
    else {
     Lista->pStesso=NULL;
    }
   }
   else {
    Lista->pStesso=NULL;
   }

  }

  fclose(fp);

  if(!verificaUtente) {
   strcpy(Lista->impoUtente.ipUtente, ipUtenteTmp);
   Lista->impoUtente.oraAccesso=oraAccessoTmp;
   Lista->pStesso=NULL;
  }

  Lista=cLista;
  fp=NULL;
  fp=fopen(NOME_FILE, "wb");


  while(Lista!=NULL) {
   if(Lista->impoUtente.oraAccesso>(oraAccessoTmp-600)&& verificaIp(Lista->impoUtente.ipUtente)) {
    fwrite(Lista, sizeof(impoUtenti), 1, fp);
    contaUtenti++;
   }
   Lista=Lista->pStesso;
  }

  fclose(fp);

  if(contaUtenti>1) {
   printf("Utenti connessi %d", contaUtenti);
  }
  else {
   printf("C\'? un solo utente connesso");
  }

  Lista=cLista;
  liberaMemoria(Lista);
  // system("pause");
  return 0;
}

// verifica ip
int verificaIp(char* IPTmp) {
  int contaPunti=0;
  int x=0;

  for(x=0; IPTmp[x]; x++) {
   if(IPTmp[x]=='.') {
    contaPunti++;
   }
  }

  if(contaPunti==3) {
   return 1;
  }
  else {
   return 0;
  }
}

// libera memoria
void liberaMemoria(impoUtenti* pTmp) {
impoUtenti* tLista;

while(pTmp!=NULL) {
  tLista=pTmp->pStesso;
  free(pTmp);
  pTmp=tLista;
}

}

:rotfl:

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 16:24
Domenica, 27/03/2005
<a href="http://forum.html.it/forum/showthread.php?s=&threadid=8092 ...'>http://forum.html.it/forum/showthread.php?s=&threadid=8092 ...; :-|



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
joker_ (Ex-Member)
Pro


Messaggi: 182
Iscritto: 14/02/2005

Segnala al moderatore
Postato alle 17:53
Domenica, 27/03/2005
si sono C232 su HTML.it

PM Quote
Avatar
joker_ (Ex-Member)
Pro


Messaggi: 182
Iscritto: 14/02/2005

Segnala al moderatore
Postato alle 17:53
Domenica, 27/03/2005
ma bastava vedere l'email per capirlo

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:18
Domenica, 27/03/2005
:asd:


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 22:10
Domenica, 27/03/2005
su html.it la mail non si vede



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM Quote
Avatar
joker_ (Ex-Member)
Pro


Messaggi: 182
Iscritto: 14/02/2005

Segnala al moderatore
Postato alle 23:56
Domenica, 27/03/2005
perch? ridi Piero?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo