On-line: Pasha, Haz, гостей 1. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 437
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 30.05.16 18:32. Заголовок: синхронизация с сервером точного времени



Понадобилось сделать синхронизацию с сервером точного времени (напр. timeserver.ru)
Пишут, что нужно коннектился с этим сервером по 13 или 37 порту. Однако получаю ошибку. Только по 80 могу. Не подскажете чего ?



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]





Пост N: 189
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 30.05.16 19:17. Заголовок: Почему не NTP ?


click here

есть пример синхронизации по NTP протоколу в MINIGUI
\MiniGUI\SAMPLES\Applications\ATOMIC_TIME\

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 438
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 30.05.16 19:59. Заголовок: Спасибо, посмотрю..


Спасибо, посмотрю

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5694
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 31.05.16 09:25. Заголовок: с форума FW Pro..


с форума FW
 
Proc Main

? GetNtpDate( "31.28.161.71" ) //204.123.2.72
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



Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 950
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.05.16 09:50. Заголовок: Вариант использовани..


Вариант использования на чистом Харборе:

/* Copyright 2013-2014 Viktor Szakats (vszakats.net/harbour) */ 

#include "hbsocket.ch"
#include "hbver.ch"

PROCEDURE Main()

LOCAL tTime

Set( _SET_DATEFORMAT, "yyyy-mm-dd" )

IF Empty( tTime := hb_ntp_GetTimeUTC( "ntp.mobatime.ru" ) )
? "Network not available"
ENDIF
? "UTC time:", tTime
? "Local time:", tTime + hb_UTCOffset() / 86400
? "System time:", hb_DateTime()
wait
RETURN


FUNCTION hb_ntp_GetTimeUTC( cServer, nPort, nTimeOut )

LOCAL tTime := hb_SToT( "" )
LOCAL hSocket, cBuffer

IF HB_ISSTRING( cServer ) .AND. ! Empty( cServer ) .AND. ;
! Empty( hSocket := hb_socketOpen( , HB_SOCKET_PT_DGRAM ) )
cBuffer := hb_BChar( 8 ) + Replicate( hb_BChar( 0 ), 47 )
IF hb_socketSendTo( hSocket, cBuffer,,, { HB_SOCKET_AF_INET, hb_socketResolveAddr( cServer ), hb_defaultValue( nPort, 123 ) } ) == hb_BLen( cBuffer )
cBuffer := Space( 12 * 4 )
IF hb_socketRecvFrom( hSocket, @cBuffer,,,, hb_defaultValue( nTimeOut, 10000 /* 10s */ ) ) == hb_BLen( cBuffer )
tTime := hb_SToT( "19000101" ) + ;
Bin2U( ntohl( hb_BSubStr( cBuffer, 10 * 4 + 1, 4 ) ) ) / 86400 + ;
( Bin2U( ntohl( hb_BSubStr( cBuffer, 11 * 4 + 1, 4 ) ) ) / ( 2 ^ 32 ) ) / 86400
ENDIF
ENDIF
hb_socketClose( hSocket )
ENDIF

RETURN tTime

STATIC FUNCTION ntohl( c )

IF hb_Version( HB_VERSION_ENDIANNESS ) == HB_VERSION_ENDIAN_LITTLE
RETURN ;
hb_BSubStr( c, 4, 1 ) + ;
hb_BSubStr( c, 3, 1 ) + ;
hb_BSubStr( c, 2, 1 ) + ;
hb_BSubStr( c, 1, 1 )
ENDIF

RETURN c

STATIC FUNCTION Bin2U( c )

LOCAL l := Bin2L( c )

RETURN iif( l < 0, l + ( 2 ^ 32 ), l )


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 439
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 01.06.16 09:08. Заголовок: Дима, Григорий, спас..


Дима, Григорий, спасибо ! Все работает. Это изящнее чем сайт через DOM разбирать

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 399
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет