Página 1 de 6

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 11:48
por Nascimento
amigos existe alguma funçao harbour que atualize a hora via internet por servidor ntp
agradeço des de ja

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 14:22
por fladimir
Não conheço mas poderia-se montar uma usando algo que puxe do site:

http://www.horariodebrasilia.org/

[]´s

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 15:18
por fladimir
Colega segue abaixo como poderia fazer baseando no site q te falei:

P.S.: Baseado em exemplo Minigui disponibilizado na Seção de Downloads pelo Pablo César, adaptado para Harbour para exibição em Console texto.

Código: Selecionar todos

Function Main()
   Alert( STRTRAN(PegaDtHrBrasilia(), '*',';' )  )
RETURN NIL

Function PegaDtHrBrasilia()
 // baseado em exemplo Minigui disponibilizado na Seção de Downloads pelo Pablo César
	Local cRet := "", cPagina := ""
	local cTexto := "Acerte seu relógio com o horário de Brasília, a hora oficial do Brasil"

	IF (oOle := Cria_OLE( "InternetExplorer.Application", , .T.)) == NIL
		RETURN .F.
	ENDIF
	oOle:Visible   := .F. // Apresenta o Browser
	oOle:ToolBar   := .F. // Desativa a barra de ferramentas
	oOle:StatusBar := .F. // Desativa a barra de status
	oOle:MenuBar   := .F. // desativa a barra de menu
	oOle:Navigate("http://www.horariodebrasilia.org/")
	
	WHILE oOle:ReadyState() != 4  // Aguarda página ser carregada, mesmo q não seja visualizado no Navegador (opão Visible := F ou T)
	   INKEY(.5)
	END
	INKEY(.2)
	
	*** Retrieve the entire HTML document as a string
	cPagina := oOle:Document():Body:InnerText 
	oOle := NIL

	If cTexto $ cPagina
	   cPagina := Substr(cPagina,At(cTexto,cPagina)+70)
	   cPagina := Substr(cPagina,At(",",cPagina)+1)
	   cPagina := Alltrim(Substr(cPagina,1,At(CRLF,cPagina)+11))
	   cDia := Strzero(Val(Substr(cPagina,1,At(" ",cPagina))),2,0)
	   cPagina := Substr(cPagina,At("de ",cPagina)+3)
	   cMes := VqMes(Alltrim(Substr(cPagina,1,At(" ",cPagina))))
	   cPagina := Substr(cPagina,At("de ",cPagina)+3)
	   cAno := Substr(cPagina,1,At(CRLF,cPagina)-1)
	   cPagina := Substr(cPagina,At(CRLF,cPagina)+4)
	   cData := cDia+"/"+cMes+"/"+cAno
	   cHora := Substr(cPagina,1,8)
	   cRet := cData+'*'+cHora
	Else
	   cRet := "Erro"
	Endif
Return cRet

********************************************************************************
Function VqMes(cText)
	Local cNMes
	Do Case
	   Case cText=="janeiro"
	        cNMes := "01"
	   Case cText=="fevereiro"
	        cNMes := "02"
	   Case cText=="março"
	        cNMes := "03"
	   Case cText=="abril"
	        cNMes := "04"
	   Case cText=="maio"
	        cNMes := "05"
	   Case cText=="junho"
	        cNMes := "06"
	   Case cText=="julho"
	        cNMes := "07"
	   Case cText=="agosto"
	        cNMes := "08"
	   Case cText=="setembro"
	        cNMes := "09"
	   Case cText=="outubro"
	        cNMes := "10"
	   Case cText=="novembro"
	        cNMes := "11"
	   Case cText=="dezembro"
	        cNMes := "12"		
	EndCase
Return cNMes
[]´s

Feliz Natal e Ano Novo.

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 16:00
por Toledo
Amigos, vejam também:

Código: Selecionar todos

*******************************************
* Compilar: hbmk2 arquivo.prg -lhbct
*******************************************

function Main()
  SetMode(25,80)

  cDataHora:= GetDataTimeNtp( "200.160.7.186")
 
/*****************************************
* Outros IP:
* 200.160.7.186
* 200.186.125.195
* 200.20.186.76
* 201.49.148.135
* 200.160.7.193
* 200.160.0.8
* 200.189.40.8
* 200.192.232.8
* 204.123.2.72
* 31.28.161.71
*****************************************/

  ? "Data: ",Left(cDataHora,10)
  ? "Hora: ",Right(cDataHora,8)

return nil

******************************************
function GetDataTimeNtp( cSeverNtp )
Local cRet, cDateTime:= Alltrim(GETNTPDATE( cSeverNtp ))
cRet:=SUBS(cDateTime,9,2)+"/"+StrZero(CtoMonth(SUBS(cDateTime,5,3)),2)+"/"+Alltrim(Right(cDateTime,5))+;
      SUBS(cDateTime,11,9)
Return (cRet)


*****************************************
#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
Abraços,

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 18:01
por Nascimento
Nobre amigo Toledo tentei compilar seu exemplo deu os seguintes erros


C:\hb30\Fontes\NTP>hbmk2 ntp.prg -lhbct
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'ntp.prg'...
Lines 74, Functions/Procedures 2
Generating C source output to 'C:\Users\ADMCAS~1\AppData\Local\Temp\hbmk_vqqnz5.dir\ntp.c'... Done.
C:\Users\ADMCAS~1\AppData\Local\Temp\hbmk_vqqnz5.dir\ntp.c:
Error E2046 ntp.prg 25: Bad file name format in include directive
Error E2046 ntp.prg 26: Bad file name format in include directive
Error E2046 ntp.prg 27: Bad file name format in include directive
Warning W8065 ntp.prg 33: Call to function 'hb_parc' with no prototype in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 36: Undefined structure 'sockaddr_in' in function HB_FUN_GETNTPDATE
Error E2449 ntp.prg 36: Size of 'server_addr' is unknown or zero in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 36: Undefined structure 'sockaddr_in' in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 36: Undefined structure 'sockaddr_in' in function HB_FUN_GETNTPDATE
Error E2449 ntp.prg 36: Size of 'server_addr' is unknown or zero in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 38: Undefined symbol 'WSADATA' in function HB_FUN_GETNTPDATE
Error E2379 ntp.prg 38: Statement missing ; in function HB_FUN_GETNTPDATE
Error E2140 ntp.prg 39: Declaration is not allowed here in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 39: Undefined structure 'timeval' in function HB_FUN_GETNTPDATE
Error E2449 ntp.prg 39: Size of 'timeout' is unknown or zero in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 39: Undefined structure 'timeval' in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 39: Undefined structure 'timeval' in function HB_FUN_GETNTPDATE
Error E2449 ntp.prg 39: Size of 'timeout' is unknown or zero in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 40: Undefined symbol 'fd_set' in function HB_FUN_GETNTPDATE
Error E2379 ntp.prg 40: Statement missing ; in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 41: Undefined symbol 'time_t' in function HB_FUN_GETNTPDATE
Error E2379 ntp.prg 41: Statement missing ; in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 43: Undefined symbol 'wsa' in function HB_FUN_GETNTPDATE
Warning W8065 ntp.prg 43: Call to function 'WSAStartup' with no prototype in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 45: Undefined symbol 'PF_INET' in function HB_FUN_GETNTPDATE
Error E2451 ntp.prg 45: Undefined symbol 'SOCK_DGRAM' in function HB_FUN_GETNTPDATE
Warning W8065 ntp.prg 45: Call to function 'getprotobyname' with no prototype in function HB_FUN_GETNTPDATE
Error E2288 ntp.prg 45: Pointer to structure required on left side of -> or ->* in function HB_FUN_GETNTPDATE
Warning W8065 ntp.prg 45: Call to function 'socket' with no prototype in function HB_FUN_GETNTPDATE
Error E2450 ntp.prg 47: Undefined structure 'sockaddr_in' in function HB_FUN_GETNTPDATE
Error E2228 ntp.prg 47: Too many error or warning messages in function HB_FUN_GETNTPDATE
*** 26 errors in Compile ***
hbmk2: Erro: Executando compilador C/C++. 1
bcc32.exe -c -q -d -6 -O2 -OS -Ov -Oi -Oc -tWM -w -Q -w-sig- -nC:\Users\ADMCAS~1\AppData\Local\Temp\hbmk_vqqnz5.dir -IC:\BORLAND\BCC55\Include -IC:\HB30\include C:\Users\ADMCAS~1\AppData\Local\Temp\h
bmk_vqqnz5.dir\ntp.c

C:\hb30\Fontes\NTP>

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 18:14
por Toledo
Josivan, copie o arquivo que acabei de anexar na minha mensagem anterior e faça um teste com ele.

Abraços,

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 18:24
por Nascimento
Amigo toledo neste segundo arquivo que esta em anexo
ele compilou mais deu essa mensagem
mesmo assim gerou o execultavel que trava quando clicado
C:\hb30\Fontes\NTP>hbmk2 demo.prg -lhbct
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'demo.prg'...
Lines 89, Functions/Procedures 2
Generating C source output to 'C:\Users\ADMCAS~1\AppData\Loca
C:\Users\ADMCAS~1\AppData\Local\Temp\hbmk_79y0hp.dir\demo.c:
Warning W8079 demo.prg 67: Mixing pointers to different 'char
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 18:51
por Toledo
Josivan, eu aqui uso o MingW e não o BCC, então não sei dizer qual o motivo deste erro. Mas mesmo assim, tentei compilar com o BCC, onde ocorreu a mesma mensagem na compilação:
C:\programa\forum\sntp>hbmk2 demo.prg -lhbct
hbmk2: Processando op‡äes do ambiente: -compiler=bcc
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'demo.prg'...
Lines 89, Functions/Procedures 2
Generating C source output to 'C:\DOCUME~1\TOLEDO~1\CONFIG~1\Temp\hbmk_0h4ims.di
r\demo.c'... Done.
C:\DOCUME~1\TOLEDO~1\CONFIG~1\Temp\hbmk_0h4ims.dir\demo.c:
Warning W8079 demo.prg 67: Mixing pointers to different 'char' types in functio
n HB_FUN_GETNTPDATE
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Ao executar o arquivo, é apresentado a data e hora, mas ocorre o seguinte erro:
C:\programa\forum\sntp>demo

Data: 19/12/2013
Hora: 17:35:08

Unrecoverable error 6005: Exception error:

Exception Code:C0000005
Exception Address:00481176
EAX:011D0004 EBX:011D3E98 ECX:011D0000 EDX:023A0008
ESI:00499078 EDI:0048C0D2 EBP:0012FF0C
CS:EIP:001B:00481176 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: 00DD20A0 0012FF18 00481114 011D3E98 0012FF24 00480A15 011D3E98 0012F
F5C 00488F12 011D3E98 00000002 0048C0FC 00488A2B 00000000 0048C13C 00000000
...
Segue em anexo o arquivo compilado com o Harbour 3.0 e MingW.

Abraços,

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 19:02
por Toledo
Fiz um outro teste com o Harbour 3.0 e BCC, colocando o parâmetro -gui na compilação:

hbmk2 demo.prg -lhbct -gui

E executou sem erro algum.

Abraços,

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 19:11
por Toledo
Amigos, favor desconsiderar a minha mensagem anterior... o erro continua ao executar o programa!

Abraços,

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 21:57
por Nascimento
sim esse seu ta funcionando corretamente , eu sou iniciante no harbour ai fico meio perdido tipo bcc mingui
vou dar uma pesquisada pra obter mais conhecimentos sobre
mais de momento muito obg
com essa funçao agora depois vem outra do tipo ela so vai acionar essa se verificar que o computador esta com internet entendeu?

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 22:02
por Nascimento
explicando melhor o que eu preciso é

o servidor ntp (ja feito pelo amigo toledo)
verificar se o computador esta conectado a internet
se estiver iniciar a funçao sntp (que o amigo toledo fez)

porque estou criando um sistema que depende de data e horas sempre atualizados e que nao sofra interferencia de usuarios mal intencionados

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 22:32
por fladimir
O exemplo q passei não precisa do Minigui, ele foi baseado mas do jeito q foi feito basta linkar junto a lib do harbour HBWIN.

E acredito q resolve teu problema.

[]'s

Servidor NTP para harbour 3.0

Enviado: 19 Dez 2013 23:18
por Toledo
Josivan Nascimento escreveu:fico meio perdido tipo bcc mingui
Só uma observação, em uma das minhas mensagens acima eu falei que não uso o BCC e sim o MingW, eu não falei nada sobre MiniGui.

Então o código que passei pode ser compilado apenas com o Harbour e a LIB hbct (por causa da função CtoMonth).

Abraços,

Servidor NTP para harbour 3.0

Enviado: 20 Dez 2013 03:28
por Nascimento
desculpe foi erro na digitaçao

o problema que ao compilar meu fonte com o MingW retorna varios erros ja com o bcc compila redondinho