Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Synchronisation multi parcs


Sujet :

Java

  1. #1
    Membre actif
    Synchronisation multi parcs
    Bonjour,

    je veux réaliser un système de synchronisation d'horloges en Java.

    Le principe est de récupérer la date et l'heure à partir d'une source fiable, puis de synchroniser un ou plusieurs parcs d'ordinateurs avec ces données (ça évite les malentendus horaires).

    Malheureusement, je ne trouve pas d'adresse fiable pour récupérer la date et l'heure en temps réel et permettant de faire l'opération entièrement avec du code Java.

    L'idée de prendre un ordinateur étalon parmi un des parcs à synchroniser me semble risquée vu le décalage à long terme avec l'heure mondiale.

    Où puis-je trouver une source fiable de date et d'heure accessible via Java ou éventuellement par écran logiciel PHP interposé ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  2. #2
    Membre chevronné
    Une liste de serveurs :
    http://www.cru.fr/services/ntp/index

    Il te faudra mettre en place une implémentation du protocole NTP. Il y a une implémentation Apache ; de ce que j'ai lu, elle est très limitée pour faire dans la précision, mais ça reste raisonnable si tu t'en tiens à quelques millisecondes près ^^

  3. #3
    Membre actif
    objectif simplicité
    Merci pour ta réponse Rei Ichido, j'ai regardé le site et ma première impression est que ça va êtrez plus long que prévu.

    Je veux faire une méthode de synchronisation de type :

    boolean synchroniseTime(String serveurIP);

    qui renverra vrai si la synchronisation est réussie.

    Le principe ensuite serait d'intégrer la méthode en question dans des programmes java répandus comme Open Office.

    Je cherche simplement à faire une méthode permettant d'effectuer la synchro simplement une fois par jour.

    Je creuse les données et je vous tiens au courant.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  4. #4
    Expert éminent sénior
    quel est l'intérêt? Le protocole NTP est déjà disponible sur la plupart des OS en natif :/
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  5. #5
    Membre actif
    appel java
    Le premier but est de faire une méthode de synchronisation en Java.
    Cependant il y a peut-être une solution plus simple que ce celle que j'envisage. L'intérêt est d'activer le protocole ou d'en faire un nouveau qui soit accessible par le langage java.

    Je ne savais pas que NTP était en natif sur les OS. Pourquoi n'est-il pas activé par défaut et comment y fait-on appel pour Windows XP ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  6. #6
    Expert éminent sénior
    En java:
    http://commons.apache.org/net/api-3....UDPClient.html

    Sous linux: ubuntu, par exemple, à l'installation propose de synchronizer avec un serveur NTP, c'est actif par défaut. Pareil à l'install de windows. Pour la config sous windows, de mémoire, réglage des fuseaux horaires etc, y a une option "synchroniser avec un serveur de temps".

    Bref vous n'avez pas besoin de machine java pour synchronizer toutes vos machines avec un serveur de temps. Et le pluspart des ISP en fournissent.
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  7. #7
    Membre actif
    class Time
    Merci !

    C'est exactement ce que je recherche !
    J'ai regardé la class TimeInfo qui contient les données retournées par la connexion par NTPUDPClient et j'y ai trouvé deux méthodes retournant des valeurs de date utilisables pour ajuster les pendules :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    Long getDelay();
    Long getOffset();

    Je n'ai pas compris laquelle doit être utilisée en priorité ou si il faut faire une combinaison des deux valeurs.

    Travaillant sous windows, je compte utiliser une commande de ce style :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd.exe /k Time \"20:01:00\"");

    pour ajuster les horloges.

    Existe-t-il une autre façon d'ajuster l'horloge, une méthode ressemblant à boolean File.setLastModified(long time) ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  8. #8
    Expert éminent sénior
    comme le dit la doc, offset c'est le temps à ajouter à à ton horloge pour t'ajuster au serveur

    delay, c'est le temps d'aller/retour entre ta machine est le serveur. Normalement le code devrais déjà te retourner offset comme offset = temps mesuré sur le serveur - temps mesuré chez toi - delay /2.
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  9. #9
    Membre actif
    résolu
    je n'ai internet que par le cyber donc je ne peux pas programmer les solutions et les tester.
    En attendant je mets la discussion en résolu puisqu'on a toutes les solution pour synchroniser des parcs facilement.

    Merci à vous.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

###raw>template_hook.ano_emploi###