Hallo bobobo,
vielen Dank für den Link.
Hallo @all
Habe jetzt herausgefunden, dass der Zeitserver über UDP scheinbar erst antwortet, wenn ihm vorher der Befehl "/n" zugesendet wird.
Wenn ich es richtig verstanden habe, bekomme ich jetzt einen 64 Bit Wert zurück, wovon wohl die ersten 32 Bit den ganzahligen Anteil darstellen.
Hmm, habe jetzt schon alles mögliche probiert, bekomme es aber irgendwie nicht hin.
Hier mal das Codeschnipsel, dass ich mir unter Zuhilfenahme der Beispiele aus diesem Forum zusammengebastelt habe:
Code: Alles auswählen
Global lBuffer.l
Global lNTPTime.l
Global Time.l
Global Sekunden.q
SysTime.SYSTEMTIME
;Time-Server im Internet
Port.l = 123
TimerServerHost.s = "10.10.10.10"
TimeOutConter.l = 0
ServerTimeOut.l = 10000000
Command.s = "/n"
If InitNetwork() = 0
MessageRequester("Fehler", "Netzwerk konnte nicht initialisiert werden!", 0)
End
EndIf
;Verbindung zum Time-Server aufnehmen
ConnectionID = OpenNetworkConnection(TimerServerHost, Port, #PB_Network_UDP)
If ConnectionID
SendNetworkData(ConnectionID, @Command, Len(Command))
Else
MessageRequester("Fehler", "Verbindung zum Server fehlgeschlagen!", 0)
End
EndIf
Repeat
ClientEvent.l = NetworkClientEvent(ConnectionID)
If ClientEvent = 2 ;Der Zeit-Server schickt Zeitdaten
lBuffer = AllocateMemory(8)
retval.l = ReceiveNetworkData(ConnectionID , lBuffer, 8)
; Sekunden = (PeekB(lBuffer+0)&$FF) << 56
; Sekunden + (PeekB(lBuffer+1)&$FF) << 48
; Sekunden + (PeekB(lBuffer+2)&$FF) << 40
; Sekunden + (PeekB(lBuffer+3)&$FF) << 32
Sekunden = (PeekB(lBuffer+0)&$FF) << 24
Sekunden + (PeekB(lBuffer+1)&$FF) << 16
Sekunden + (PeekB(lBuffer+2)&$FF) << 8
Sekunden + (PeekB(lBuffer+3)&$FF)
Debug StrQ(Sekunden)
Debug ("Zeit vom Server empfangen!")
Quit = 1
EndIf
If ClientEvent = 0 ;Keine Reaktion vom Zeit-Server
TimeOutConter = TimeOutConter + 1
If TimeOutConter > ServerTimeOut
MessageRequester("ZeitServerTimeOut", "Der Zeitserver übermittelt keine Zeitinformationen!", 0)
Quit = 1
EndIf
EndIf
Until Quit = 1
CloseNetworkConnection(ConnectionID)
End
Hat jemand eine Idee oder einen Tip oder einen Link, wie ich diesen Wert weiterverarbeiten muss?
Habe mich noch nie wirklich mit dem Auslesen einzelner Bytes oder Bits beschäftigt, vor allem ist mir völlig unklar, wie ich den Ganzahligen Anteil mit dem Nachkommateil zusammensetzen kann, wobei mir eigtl, der ganzahlige Anteil, der wohl die Anzahl der Sekunden seid 1.1.1900 darstellt, vollkommen reichen würde.