Velena Skrevet 4. januar 2009 Del Skrevet 4. januar 2009 Hallo. Jeg har et program som jeg gjerne vil begrense på den måten at den bare kan brukes en viss tidsperiode (uavhengig av når den ble tatt i bruk), og lurer derfor på hvordan jeg enklest mulig kan finne den "virkelige" tiden, altså ikke system tiden, siden den lett kan settes tilbake slik at programmet alltid virker. Takk på forhånd. Lenke til kommentar
Giddion Skrevet 4. januar 2009 Del Skrevet 4. januar 2009 Da må du vel få tiden fra et annet sted som f. eks. internett (eller gps ). Avhengighet av internett syntes jeg er no-no, men det er opp til deg. Du kan eventuelt lagre tiden når programmet kjøres og hvis tiden er under den lagrede så kjøres ikke programmet. Dvs. hvis tiden som er lagret er etter tiden som er på datamaskinen sperres programmer for all tid. Lenke til kommentar
Velena Skrevet 4. januar 2009 Forfatter Del Skrevet 4. januar 2009 Hvordan ville du freslå å lagre tiden? Tenkte på registeret, men ville det ike bare vært for brukeren å slette datoen med regedit? Lenke til kommentar
Giddion Skrevet 4. januar 2009 Del Skrevet 4. januar 2009 Jeg er veldig usikker...har aldri satt meg inn i det, Du kan jo på mange måter bare gi opp å være smartere enn alle. Du kan jo lagre det i mappe under appdata til default brukeren, men det er alltid noen som vil finne det fram. Hvis du bruker registeret eller lagrer det på en fil kan muligens under 5% av folk å knekke det.....det spørs jo litt på hvem som bruker programmet også da . Alt kan knekkes, man kan jo lage en virtuel pc som man kan kjøre programmet fra og da kan man hente fram "rene" maskiner på minutter. Det er sikkert mulig å kjøpe ferdige profesjonelle dato løsninger også. Lenke til kommentar
LostOblivion Skrevet 5. januar 2009 Del Skrevet 5. januar 2009 (endret) Jeg hadde lite å gjøre... Dette er en daytime-server. Svarer kun på GET TIME fra medfølgende getTime-klientmetode. Bruker Berkeley sockets. (God gammel kjenning fra INF1060 på Blindern. ) client.c: #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSZ 1024 #define REQUEST "GET TIME" static char timebuf[BUFSZ]; char *getTime(char *hostname, int portno); int main(int argc, char *argv[]) { char *time; if (argc != 3) { printf("Usage: hostname portno\n"); exit(1); } printf("Getting time...\n"); time = getTime(argv[1], atoi(argv[2])); if (time == NULL) exit(1); printf("Time of day: %s\n", time); return 0; } char *getTime(char *hostname, int portno) { int sock, bytes; struct sockaddr_in serv_addr; struct hostent *server; char addrbuf[BUFSZ]; sock = socket(PF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("ERROR opening socket"); return NULL; } server = gethostbyname(hostname); if (server == NULL) { fprintf(stderr, "ERROR, no such host\n"); return NULL; } bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy(server->h_addr, &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sock,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { perror("ERROR connecting"); return NULL; } inet_ntop(PF_INET, &serv_addr, addrbuf, BUFSZ); printf("=== Connected to %s ===\n", addrbuf); write(sock, REQUEST, strlen(REQUEST)); bytes = read(sock, timebuf, BUFSZ-1); timebuf[bytes] = '\'; return timebuf; } server.c: #include <sys/socket.h> #include <netinet/in.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSZ 1024 #define ERR "Protocol mismatch" int main(int argc, char *argv[]) { int req_sock, cli_sock, portno, addrlen; struct sockaddr_in serv_addr, cli_addr; time_t tstamp; struct tm *loctime; if (argc != 2) { fprintf(stderr, "Usage: %s portno\n", argv[0]); exit(1); } req_sock = socket(PF_INET, SOCK_STREAM, 0); if (req_sock < 0) { perror("ERROR opening socket"); exit(1); } portno = atoi(argv[1]); bzero(&serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(req_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { perror("ERROR on binding"); exit(1); } listen(req_sock, SOMAXCONN); printf("Server started\n"); for (;;) { addrlen = sizeof(cli_addr); fflush(stdout); cli_sock = accept(req_sock, (struct sockaddr *)&cli_addr, &addrlen); if (cli_sock < 0) { perror("ERROR on accept"); exit(1); } if (fork() == 0) { char addrbuf[BUFSZ]; char buf[BUFSZ]; int bytes; close(req_sock); inet_ntop(PF_INET, &cli_addr, addrbuf, BUFSZ); printf("=== %s connected ===\n", addrbuf); read(cli_sock, buf, BUFSZ); if (strcmp("GET TIME", buf)) { write(cli_sock, ERR, strlen(ERR)); close(cli_sock); exit(1); } tstamp = time(NULL); loctime = localtime(&tstamp); strftime(buf, BUFSZ, "%c", loctime); /* Thu Aug 23 14:55:02 2001 */ write(cli_sock, buf, strlen(buf)); close(cli_sock); exit(0); } } close(req_sock); return 0; } Sett opp serveren på en maskin du veit alltid kjører med riktig tid, og bruk getTime-funksjonen i programmet ditt. Send meg en PM om du vil ha en kompilert kjørbar som også kan kjøres i Windows. Go to town. Ellers er det nok en del maskiner rundt om kring i verden som tar i bruk NTP eller lignende. Det finnes nok da programvare som lar deg enkelt hente tid og dato fra en gitt maskin. Uten å ha lett selv, er det nok enkelt å finne dette gratis ved litt søking på intarnetz. Endret 5. januar 2009 av LostOblivion Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå