Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   INetTime (https://www.delphipraxis.net/2213-inettime.html)

Luckie 12. Jan 2003 18:30


INetTime
 
So hier ist es also nun. Ein kleines Programm um mittels eines Zeitservers aus dem Internet die Systemzeit zu stellen.

Eine Serverliste ist mit in die Ressource einkompiliert und wird beim Start extrahiert, falls nicht vorhanden. Der Benutzer kann sie dann beliebig editieren und erweitern.

Unter Win ME und 2000 schon erfolgreich getestet. Unter XP soll es zu erheblichen Performanceproblemen gekommen sein.

Es ist nur so, da das "Zeit holen" noch nicht in einem separaten Thread liegt, kann das Programm eventuell einfrieren, wenn es längerdauert die Verbindung zum Server herzustellen.

Ach so. Die Server Zeit ist UTC! Das wird aber von Windows beim Stellen der Systemzeit berücksichtigt.

Download: INetTime

RomanK 12. Jan 2003 18:41

Nettes Tool!!! :spin:
Hab XP und es hat einwandfrei getan, bis auf dass das die Sekunden nich genau abgeglichen wurden ...

Luckie 12. Jan 2003 18:52

Das mit den Sekunden liegt wohl draan, das es etwas verzögert aktualisiert wird. Es muß ja die Verbindung zum Server hergestellt werden, das Signal muß empfangen werden, dann kommt noch mein Timer ins Spiel, ...

CalganX 12. Jan 2003 18:57

Hi Luckie,
du hast das gemacht, dass ich bereits vor langem als Tutorial schreiben wollte...
Naja, nun zum Programm: Hab ebenfalls XP; läuft problemlos. Nur ruckelt ein wenig. Sonst funktioniert alles.

Chris

Luckie 12. Jan 2003 19:07

Dem vorangegangen war dieser Thread in Auq.de: http://www.auq.de/viewtopic.php?t=5682

Luckie 13. Jan 2003 09:09

So neue Version 1.1. Jetzt wird nur die Zeit versucht vom Server zu holen, wenn eine Internetverbindung besteht.

Link siehe erste Posting.

hitzi 13. Jan 2003 09:40

Was ist wenn meine I-Net Verbindung über ein Netzwerk läuft?

Genau dann funktioniert dein Programm nicht mehr, da es dann nicht richtig erkennt ob ein Rechner online ist oder nicht.

Habe die entsprechenden Zeilen auskommentiert. Nun ist mir aufgefallen, dass unter Win2000 zwar einmal die Zeit geholt, aber dann wird der Timer zu oft aufgerufen. Das Programm läuft sich fest ("Keine Rückmeldung ..").
Habe darauf hin den Timerwert erhöht von 1sec auf 10sec. Nun läuft das Programm. Allerdings sollte schon beim Ändern des Servers und beim Start des Programmes die Serverzeit geholt werden und nicht erst wenn der Timer so weit ist. Mit der geänderten Version (10sec) muss ich nach dem Programmstart erst 10sec warten, bevor die Zeit abgefragt wird.

Ansonsten ein ist es ein gutes Tool :)

MfG Hitzi

Luckie 13. Jan 2003 12:17

Zitat:

Zitat von hitzi
Nun ist mir aufgefallen, dass unter Win2000 zwar einmal die Zeit geholt, aber dann wird der Timer zu oft aufgerufen. Das Programm läuft sich fest ("Keine Rückmeldung ..").

Ich habe auch Windows2000 und keine Probleme in der Hinsicht.
Zitat:

Habe darauf hin den Timerwert erhöht von 1sec auf 10sec. Nun läuft das Programm. Allerdings sollte schon beim Ändern des Servers und beim Start des Programmes die Serverzeit geholt werden und nicht erst wenn der Timer so weit ist. Mit der geänderten Version (10sec) muss ich nach dem Programmstart erst 10sec warten, bevor die Zeit abgefragt wird.
Wenn du den Wert geändert hast, dann ist das klar, aber eine Sekunde sollte man schon mal Zeit haben oder?

hitzi 13. Jan 2003 12:28

Einmal holt es auch die Zeit korrekt ab. Aber dann reagiert das Programm nicht mehr und ich kann es nur über Delphi beenden.

Evt. spielt die INet Anbindung und deren Auslastung eine Rolle.
Programm verbindet sich mit Server - bekommt die Zeit - disconnected. Vielleicht ist die Zeitspanne die dieser Vorgang braucht bei einigen länger als eine Sekunde. Evt. ist da dein Problem und nicht bei WinXP (wie oben angesprochen).


MfG Hitzi

hitzi 13. Jan 2003 12:45

An der Zeit liegt's doch nicht. Habe probeweise ein Variable working (Boolean) eingefügt. Die war auf True solange die Internettime abgefragt wird und am Ende der Procedure wurde sie wieder auf false gesetzt.
Am Anfang der Function GetINetTime wurde nun diese Variable abgefragt. Bei working=true -> exit. Das half aber auch nichts :(

Danach hab ich dein Programm nochmal durch den Debugger gejagt :)

Delphi-Quellcode:
if(s <> INVALID_SOCKET) and (hostent <> nil) then
  begin
    ZeroMemory(@saddr,sizeof(TSockAddr));
    saddr.sin_addr.S_addr := integer(pointer(hostent^.h_addr_list^)^);
    saddr.sin_family     := PF_INET;
    saddr.sin_port       := htons(37);

    res := connect(s,saddr,sizeof(TSockAddr));
    if(res <> SOCKET_ERROR) then
      res := recv(s,i,sizeof(i),0);
Bei der letzten Codezeile bleibt das Programm hängen. Nie beim ersten Mal!!(?Warum?) Aber auch nicht immer beim zweiten Mal. War unterschiedlich.

Kannst du da nicht eine Art Timeout einfügen (eine Sekunde auf Antwort warten, ansonsten Fehler - nächster Versuch beim nächsten Timer Ereignis)?

MfG Hitzi


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz