Форум » [x]Harbour » GETNTPDATE у кого то работает ? » Ответить

GETNTPDATE у кого то работает ?

Dima: [pre2] function Main() ? GetNtpDate( "31.28.161.71" ) // ntp2.time.in.ua // возвращает 0 return nil #pragma BEGINDUMP #include <hbapi.h> #include <winsock.h> #define MAXLEN 1024 HB_FUNC( GETNTPDATE ) { char * hostname = ( char * ) hb_parc( 1 ); int portno = 123; // NTP is port 123 int i; // misc var i unsigned char msg[ 48 ] = { 010, 0, 0, 0, 0, 0, 0, 0, 0 }; // the packet we send unsigned long buf[ MAXLEN ]; // the buffer we get back struct protoent * proto; // struct sockaddr_in server_addr; int s; // socket int tmit; // the time -- This is a time_t sort of WSADATA wsa; WSAStartup( 0x101, &wsa ); proto = getprotobyname( "udp" ); s = socket( PF_INET, SOCK_DGRAM, proto->p_proto ); memset( &server_addr, 0, sizeof( server_addr ) ); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr( hostname ); server_addr.sin_port = htons( portno ); i = sendto( s, msg, sizeof( msg ), 0, ( struct sockaddr * ) &server_addr, sizeof( server_addr ) ); hb_retnl( WSAGetLastError() ); } #pragma ENDDUMP [/pre2] Исходник взял тут

Ответов - 10

Pasha: Dima пишет: // возвращает 0 hb_retnl( WSAGetLastError() ); возвращает код последней ошибки, а он наверное и есть 0 Что написано, то и возвращает

Dima: Pasha В С я не силен. А что нужно что бы функция вернула время (дату) ?

Pasha: А я не силен в этих структурах и вызовах socket функций. Там посылается запрос sendto, а еще как-то надо получить ответ. Может подождать, пока сам Антонио допилит ? Он же написал, что still on development


Dima: Понял , спасибо.

Dima: Да ты был прав , допилил он ;) Правда прога теперь падает с жуткой месагой а у него судя по скрину работает. [pre2] Unrecoverable error 6005: Exception error: Exception Code:C0000005 12:5 Exception Address:00487E1A EAX:00D40B54 EBX:00D4BCB0 ECX:00D40B50 EDX:01A816A8 ESI:004A01B0 EDI:004930CC EBP:0012FF0C CS:EIP:001B:00487E1A SS:ESP:0023:0012FF08 DS:0023 ES:0023 FS:003B GS:0000 Flags:00010202 CS:EIP: F6 02 01 74 2A 8B 0A 83 E1 FC 83 C1 04 01 08 3B SS:ESP: 00DA20A0 0012FF18 00487DB8 00D4BCB0 0012FF24 004876B9 00D4BCB0 0012FF5C 0048FB0E 00D4BCB0 00000002 004930F6 0048F627 00000000 00493138 00000000 C stack: EIP: EBP: Frame: OldEBP, RetAddr, Params... 00487E1A 0012FF0C 0012FF18 00487DB8 00D4BCB0 00487DB8 0012FF18 0012FF24 004876B9 00D4BCB0 004876B9 0012FF24 0012FF5C 0048FB0E 00D4BCB0 00000002 004930F6 0048F627 00000000 00493138 00000000 004A01A8 0048FB0E 0012FF5C 0012FF80 0048F676 004A01A4 00000001 00000000 00493138 00000000 0048E8E0 7FFD9000 0048F676 0012FF80 0012FF94 0048E938 00000000 00000000 00000000 0048E938 0012FF94 0012FFB8 0048F86F 00000000 00000000 00000000 7FFD9000 7FFD9000 0012FFE0 00489244 0048F86F 0012FFB8 0012FFF0 00000000 00493138 7C816FD7 00000000 00000000 7FFD9000 805502FA 0012FFC8 85CCC020 Modules: 0x00400000 0x000AF000 C:\1\boris\dd\6\t.exe 0x7C900000 0x000B0000 C:\WINDOWS\system32\ntdll.dll 0x7C800000 0x000F5000 C:\WINDOWS\system32\kernel32.dll 0x7E410000 0x00090000 C:\WINDOWS\system32\USER32.DLL 0x77F10000 0x00048000 C:\WINDOWS\system32\GDI32.dll 0x71AB0000 0x00017000 C:\WINDOWS\system32\WS2_32.DLL 0x77C10000 0x00058000 C:\WINDOWS\system32\msvcrt.dll 0x71AA0000 0x00008000 C:\WINDOWS\system32\WS2HELP.dll 0x77DD0000 0x0009B000 C:\WINDOWS\system32\ADVAPI32.dll 0x77E70000 0x00091000 C:\WINDOWS\system32\RPCRT4.dll 0x76390000 0x0001D000 C:\WINDOWS\system32\IMM32.DLL 0x10000000 0x0004D000 C:\WINDOWS\system32\guard32.dll 0x77C00000 0x00008000 C:\WINDOWS\system32\VERSION.dll 0x4FFE0000 0x00008000 C:\WINDOWS\system32\fltlib.dll 0x71A50000 0x0003F000 C:\WINDOWS\system32\mswsock.dll [/pre2]

ММК: У меня работает

Dima: ММК FW ?

ММК: да

Dima: Пересобрал под Harbour_MINGW , работает однако. В связке Harbour_BCC55 - падало ММК пишет: У меня работает У тебя веротяно BCC582 или выше и поэтому тож работает Вообщем код рабочий [pre2] Proc Main ? GetNtpDate( "31.28.161.71" ) return nil #pragma BEGINDUMP #include <hbapi.h> #include <winsock.h> #include <time.h> #define MAXLEN 1024 HB_FUNC( GETNTPDATE ) { char * hostname = ( char * ) hb_parc( 1 ); unsigned char msg[ 48 ] = { 010, 0, 0, 0, 0, 0, 0, 0, 0 }; // the packet we send unsigned long buf[ MAXLEN ]; // the buffer we get back struct sockaddr_in server_addr; int s; // socket WSADATA wsa; struct timeval timeout; fd_set fds; time_t tmit; WSAStartup( 0x101, &wsa ); s = socket( PF_INET, SOCK_DGRAM, getprotobyname( "udp" )->p_proto ); memset( &server_addr, 0, sizeof( server_addr ) ); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr( hostname ); server_addr.sin_port = htons( 123 ); // ntp port sendto( s, msg, sizeof( msg ), 0, ( struct sockaddr * ) &server_addr, sizeof( server_addr ) ); FD_ZERO( &fds ); FD_SET( s, &fds ); timeout.tv_sec = 10; timeout.tv_usec = 0; if( select( 0, &fds, NULL, NULL, &timeout ) ) { recv( s, ( void * ) buf, sizeof( buf ), 0 ); tmit = ntohl( buf[ 10 ] ); tmit-= 2208988800U; } else MessageBox( 0, "can't read from NTP server", "ok", 0 ); WSACleanup(); hb_retc( ctime( &tmit ) ); } #pragma ENDDUMP [/pre2]

ММК: BCC582 и хХарбор



полная версия страницы