Boa noite colegas.
Pesquisei no Fórum por "data e hora do servidor" e encontrei um tópico.
Pelo que entendi não existe uma Função no Harbour / xHarbour que nos possa fornecer a data e hora do servidor.
Aquele método proposto mais parece uma "gambiarra". Primeiro aciona-se um *.BAT, que grava um *.TXT com a data e a hora, que depois é lido via MemoRead(), interpretado e gravado numa variável com a data e hora.
Ainda não temos uma solução melhor ?
Data e hora do servidor
Moderador: Moderadores
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Data e hora do servidor
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Data e hora do servidor
Se foi uma solução para Clipper... não vejo como não usar isso...Aquele método proposto mais parece uma "gambiarra". Primeiro aciona-se um *.BAT, que grava um *.TXT com a data e a hora, que depois é lido via MemoRead(), interpretado e gravado numa variável com a data e hora.
Você leu este tópico ?
https://pctoledo.org/forum/viewto ... 985#p86985
Ou pesquisou por: HB_DATETIME() ?
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Data e hora do servidor
Se instalar o letodb no servidor, ele retorna a data e hora para as estações.
Ou usar outro serviço só para isso criado pelo próprio harbour via socket.
Saudações,
Itamar M. Lins Jr.
Código: Selecionar todos
aDH := LETO_MGGETTIME()
If DToS(aDH[1]) <> DToS(DATE())
Hwg_MsgStop("Corrija a data do computador.")
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Data e hora do servidor
Olá Hasse,
1-Envio um arquivo ao servidor como DATETIME.GET
2-O servidor então cria um arquivo como DATETIME.SAY
3-Faço a leitura da data e hora desse arquivo
4-Comparo a data (claro, sem tolerância), e a hora com tolerância de 10 segundos
5-Qualquer diferença, o terminal é sincronizado e apenas aviso o usuário que a Data e Hora do Terminal foi sincronizada com o Servidor.
Veja que na contrib em: contrib\hbwin\tests\oletst1.prg tem este exemplo, que não consegui testar, mas não me preocupei porque ele não faz nada diferente do que faço hoje.
Nota: Não usei a Tag Code para destacar algo que acho importante:
Me parece que não, e como ainda não uso LetoDB, acabei optando também por uma gambiarra como você chamou, até que apareça algo mais inteligente para poder usar:Hasse escreveu:Pelo que entendi não existe uma Função no Harbour / xHarbour que nos possa fornecer a data e hora do servidor.
1-Envio um arquivo ao servidor como DATETIME.GET
2-O servidor então cria um arquivo como DATETIME.SAY
3-Faço a leitura da data e hora desse arquivo
4-Comparo a data (claro, sem tolerância), e a hora com tolerância de 10 segundos
5-Qualquer diferença, o terminal é sincronizado e apenas aviso o usuário que a Data e Hora do Terminal foi sincronizada com o Servidor.
Veja que na contrib em: contrib\hbwin\tests\oletst1.prg tem este exemplo, que não consegui testar, mas não me preocupei porque ele não faz nada diferente do que faço hoje.
Nota: Não usei a Tag Code para destacar algo que acho importante:
#define NETSERVER "127.0.0.1"
#define NETPORT 2941
#define NETPASSWD "topsecret"
PROCEDURE Main()
LOCAL oObject
oObject := win_OleCreateObject( "MyOleRPCServer" )
IF !Empty( oObject )
IF oObject:connect( NETSERVER, NETPORT,, NETPASSWD )
? "Connected to the server:", NETSERVER
/*
execute some functions on the server side and display
the results.
*/
? oObject:upper( "hello world !!!" )
? "SERVER DATE:", oObject:DATE()
? "SERVER TIME:", oObject:TIME()
? "SERVER DATETIME:", oObject:HB_DATETIME()
ELSE
? "Cannot connect to the server:", NETSERVER
ENDIF
ELSE
? "Can not access 'MyOleRPCServer' OLE server."
ENDIF
WAIT
RETURN
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Data e hora do servidor
Boa noite colegas Pablo, Itamar e Jairo.
Pablo:
Eu havia visto este tópico, mas este aplicativo ainda está sendo compilado em xHarbour, infelizmente.
Itamar:
Acho que ainda vou ficar com a "gambiarra" para evitar instalar mais um aplicativo no servidor.
Jairo:
Certamente ainda vou testar esta opção "Tag Code". Certamente, se eu obtiver êxito, posto o resultado.
Obrigado pelas informações sempre tão valiosas e solucionadoras.
Pablo:
Eu havia visto este tópico, mas este aplicativo ainda está sendo compilado em xHarbour, infelizmente.
Itamar:
Acho que ainda vou ficar com a "gambiarra" para evitar instalar mais um aplicativo no servidor.
Jairo:
Certamente ainda vou testar esta opção "Tag Code". Certamente, se eu obtiver êxito, posto o resultado.
Obrigado pelas informações sempre tão valiosas e solucionadoras.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Data e hora do servidor
Porque para ler arquivo no servidor você precisa compartilha alguma pasta.
E para trabalha via sockets, precisa liberar alguma porta que o programa irá usar p/ comunicação com as estações.
Porém as duas formas precisa de um gatilho, e no servidor irá sempre ter algo rodando esperando para informar a DATATIME.
Tem um exemplo tosco que achei e testei aqui via socket e funcionou.
Essas são áreas ainda pouco exploradas por mim.
tcp_servidor.prg
tcp_cliente.prg
Saudações,
Itamar M. Lins Jr.
E para trabalha via sockets, precisa liberar alguma porta que o programa irá usar p/ comunicação com as estações.
Porém as duas formas precisa de um gatilho, e no servidor irá sempre ter algo rodando esperando para informar a DATATIME.
Tem um exemplo tosco que achei e testei aqui via socket e funcionou.
Essas são áreas ainda pouco exploradas por mim.
tcp_servidor.prg
Código: Selecionar todos
#include "hbsocket.ch"
#define ADDRESS "127.0.0.1"
#define PORT 10000
#define EOT ( Chr( 4 ) )
#define LISTEN_TIMEOUT 3000 // 3s
#define RECV_TIMEOUT 10000 // 10s
request HB_MT
procedure main()
local hListen
local hSocket
if !hb_mtvm()
? "multithread support required"
return
endif
? "create listening socket..."
if empty( hListen := hb_socketOpen() )
? "socket create error " + hb_ntos( hb_socketGetError() )
endif
if !hb_socketBind( hListen, { HB_SOCKET_AF_INET, ADDRESS, PORT } )
? "bind error " + hb_ntos( hb_socketGetError() )
endif
if !hb_socketListen( hListen )
? "listen error " + hb_ntos( hb_socketGetError() )
endif
do while .t.
if empty( hSocket := hb_socketAccept( hListen, , LISTEN_TIMEOUT ) )
if hb_socketGetError() == HB_SOCKET_ERR_TIMEOUT
? "loop..."
else
? "accept error " + hb_ntos( hb_socketGetError() )
endif
else
? "accept socket request"
hb_threadDetach( hb_threadStart( @process(), hSocket ) )
endif
if inkey() == 27
? "quitting - esc pressed"
exit
endif
enddo
? "close listening socket..."
hb_socketShutdown( hListen )
hb_socketClose( hListen )
return
procedure process( hSocket )
local cRequest
local nLen
local cBuf
do while .t.
cRequest := ""
nLen := 1
do while at( EOT, cRequest ) == 0 .and. nLen > 0
cBuf := space( 4096 )
if ( nLen := hb_socketRecv( hSocket, @cBuf, , , RECV_TIMEOUT ) ) > 0
cRequest += left( cBuf, nLen )
else
if nLen == -1 .AND. hb_socketGetError() == HB_SOCKET_ERR_TIMEOUT
nLen := 0
endif
endif
enddo
if nLen == -1
? "hb_socketRecv error " + hb_ntos( hb_socketGetError() )
elseif nLen == 0
? "connection closed"
exit
else
? cRequest
If "date" $ cRequest
? hb_socketSend( hSocket, dtoc(date()) + EOT )
endif
if "exit" $ cRequest
? "exit"
exit
endif
endif
enddo
? "close socket..."
hb_socketShutdown( hSocket )
hb_socketClose( hSocket )
return
Código: Selecionar todos
#include "hbsocket.ch"
#define ADDRESS "127.0.0.1"
#define PORT 10000
#define EOT ( Chr( 4 ) )
#define RECV_TIMEOUT 10000 // 10s
procedure main()
local hSocket
local cRequest
local nLen
local cBuf
if empty( hSocket := hb_socketOpen() )
? "socket create error " + hb_ntos( hb_socketGetError() )
endif
if !hb_socketConnect(hSocket, { HB_SOCKET_AF_INET, ADDRESS, PORT } )
? "socket connect error " + hb_ntos( hb_socketGetError() )
endif
? hb_socketSend( hSocket, "Ola !" + EOT )
? hb_socketSend( hSocket, "Tudo Bem ?" + EOT )
? hb_socketSend( hSocket, "date ?" + EOT )
cRequest := ""
nLen := 1
do while at( EOT, cRequest ) == 0 .and. nLen > 0
cBuf := space( 4096 )
if ( nLen := hb_socketRecv( hSocket, @cBuf, , , RECV_TIMEOUT ) ) > 0
cRequest += left( cBuf, nLen )
else
if nLen == -1 .AND. hb_socketGetError() == HB_SOCKET_ERR_TIMEOUT
nLen := 0
endif
endif
enddo
if nLen == -1
? "hb_socketRecv error " + hb_ntos( hb_socketGetError() )
elseif nLen == 0
? "connection closed"
else
? cRequest
endif
? hb_socketSend( hSocket, "exit" + EOT )
hb_socketShutdown( hSocket )
hb_socketClose( hSocket )
return
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.