int main(int argc, char **argv) ???
-
Hallo,
ich habe ein kleines SNTP Programm welches ich von der Konsole mit einem zusätlichem Parameter (IP Adresse) aufrufe.c:\sntpcli.exe 123.123.123.123
Ich will nun dieses Programm so abändern, das es ohne den zusätzlichen Parameter aufrufbar ist.
Ich versuche schon seit mehreren Stunden die IP Adresse in der main() zu deklarieren.
Kann mir da jemand bitte helfen!
int main(int argc, char **argv) { int result; if (argc != 2) { printf("\nUsage: %s <server-ip>\n", argv[0]); return 0; } // prepare the structures memset(&sntphdr, 0, sizeof(SNTPHDR)); memset(&recvhdr, 0, sizeof(SNTPHDR)); setversion(3, &sntphdr); setmode(3, &sntphdr); // send request to NTP server and receive response sd = opensocket(SOCK_DGRAM, &error); if (sd == API_ERROR) { #ifdef _DEBUG_ printf("\nOpen socket error: %d!!!\n", error); #endif return 0; } inet_addr(argv[1], &ip); // parameter 1 = server ip address saddr.sin_family = AF_INET; saddr.sin_port = htons(123); // NTP port 123 saddr.sin_addr.s_addr = ip; result = sendto(sd, (char*)&sntphdr, sizeof(SNTPHDR), MSG_BLOCKING, (struct sockaddr*)&saddr, &error); if (result == API_ERROR) { #ifdef _DEBUG_ printf("\nSend error: %d!!!\n", error); #endif return 0; } memset(&addr, 0, sizeof(struct sockaddr)); addr.sin_family = AF_INET; result = recvfrom(sd, (char*)&recvhdr, sizeof(SNTPHDR), MSG_TIMEOUT, 10000l, (struct sockaddr*)&addr, &error); closesocket(sd, &error); if (result == 0) { #ifdef _DEBUG_ printf("\nTimeout!!!\n"); #endif return 0; } // date and time translation datetime = recvhdr.Transmit_Timestamp1; tmp = (datetime & 0xFF000000l) >> 24; // ******************************* tmp |= (datetime & 0x00FF0000l) >> 8; // translate it in the right tmp |= (datetime & 0x0000FF00l) << 8; // format tmp |= (datetime & 0x000000FFl) << 24; // ******************************* datetime = tmp - CLOCK_OFFSET_1970; unixtodos(datetime, &dt, &tm); // Timezone Correction if( (dt.da_year % 400) == 0 ) schrikkel = 1; else { if( (dt.da_year % 100) == 0 ) schrikkel = 0; else{ if( (dt.da_year % 4) == 0 ) schrikkel = 1; else schrikkel = 0; } } if( tm.ti_hour+TIMEZONE < 23 ) tm.ti_hour = tm.ti_hour + TIMEZONE; else { tm.ti_hour = (tm.ti_hour + TIMEZONE) - 24; dt.da_day++; if( dt.da_mon == 2 ) { if ( schrikkel == 1 && dt.da_day == 30 ) { dt.da_day = 1; dt.da_mon++; } if ( schrikkel == 0 && dt.da_day == 29 ) { dt.da_day = 1; dt.da_mon++; } } else { if( dt.da_day == 32 && (dt.da_mon & 0x01) == 1 ){ dt.da_day = 1; dt.da_mon++; } if( dt.da_day == 31 && (dt.da_mon & 0x00) == 0 ){ dt.da_day = 1; dt.da_mon++; } if( dt.da_mon == 13 ) { dt.da_year++; dt.da_mon = 1; } } } printf("Time: %02d:%02d:%02d\n", tm.ti_hour, tm.ti_min, tm.ti_sec); printf("Date: %d %s %d\n", dt.da_day, month[dt.da_mon], dt.da_year); // set date inregs.h.ah = 0x2B; inregs.x.cx = dt.da_year; inregs.h.dh = dt.da_mon; inregs.h.dl = dt.da_day; int86(0x21, &inregs, &outregs); // set time inregs.h.ah = 0x2D; inregs.h.ch = tm.ti_hour; inregs.h.cl = tm.ti_min; inregs.h.dh = tm.ti_sec; int86(0x21, &inregs, &outregs); return 0; }
Danke Uli Greiner
-
Was genau ist das Problem? Du musst dir einfach ein char-Array deklarieren und mit deiner Standard-IP-Adresse initialisieren (als Text). Anstatt argv[1] verwendest du dann hald dein char-Array. Und die Abprüfung von argc musst du natürlich auch rausschmeissen ;).