IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 de l'heure NTP


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Synchronisation de l'heure NTP
    Bonjour

    Je ne sais pas si je suis au bon endroit.
    je fais des recherches sur la Synchronisation de l'heure entre plusieurs Composant logicielle

    j'ai trouvé qu'il faut utiliser le protocole NTP.

    mais j'ai pas compris le principe de protocole

    et comment je peux faire une implémentation en Java .

    comme première pas j'ai commencer par voir l’exemple de Apache

    voici les deux class de l'exemple :
    La classe : NTPClient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    package examples.ntp;
     
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.text.NumberFormat;
    import org.apache.commons.net.ntp.NTPUDPClient;
    import org.apache.commons.net.ntp.NtpUtils;
    import org.apache.commons.net.ntp.NtpV3Packet;
    import org.apache.commons.net.ntp.TimeInfo;
    import org.apache.commons.net.ntp.TimeStamp;
     
    public final class NTPClient
    {
        private static final NumberFormat numberFormat = new java.text.DecimalFormat("0.00");
     
        /**
         * Process <code>TimeInfo</code> object and print its details.
         * @param info <code>TimeInfo</code> object.
         */
        public static void processResponse(TimeInfo info)
        {
            NtpV3Packet message = info.getMessage();
            int stratum = message.getStratum();
            String refType;
            if (stratum <= 0) {
                refType = "(Unspecified or Unavailable)";
            } else if (stratum == 1) {
                refType = "(Primary Reference; e.g., GPS)"; // GPS, radio clock, etc.
            } else {
                refType = "(Secondary Reference; e.g. via NTP or SNTP)";
            }
            // stratum should be 0..15...
            System.out.println(" Stratum: " + stratum + " " + refType);
            int version = message.getVersion();
            int li = message.getLeapIndicator();
            System.out.println(" leap=" + li + ", version="
                    + version + ", precision=" + message.getPrecision());
     
            System.out.println(" mode: " + message.getModeName() + " (" + message.getMode() + ")");
            int poll = message.getPoll();
            // poll value typically btwn MINPOLL (4) and MAXPOLL (14)
            System.out.println(" poll: " + (poll <= 0 ? 1 : (int) Math.pow(2, poll))
                    + " seconds" + " (2 ** " + poll + ")");
            double disp = message.getRootDispersionInMillisDouble();
            System.out.println(" rootdelay=" + numberFormat.format(message.getRootDelayInMillisDouble())
                    + ", rootdispersion(ms): " + numberFormat.format(disp));
     
            int refId = message.getReferenceId();
            String refAddr = NtpUtils.getHostAddress(refId);
            String refName = null;
            if (refId != 0) {
                if (refAddr.equals("127.127.1.0")) {
                    refName = "LOCAL"; // This is the ref address for the Local Clock
                } else if (stratum >= 2) {
                    // If reference id has 127.127 prefix then it uses its own reference clock
                    // defined in the form 127.127.clock-type.unit-num (e.g. 127.127.8.0 mode 5
                    // for GENERIC DCF77 AM; see refclock.htm from the NTP software distribution.
                    if (!refAddr.startsWith("127.127")) {
                        try {
                            InetAddress addr = InetAddress.getByName(refAddr);
                            String name = addr.getHostName();
                            if (name != null && !name.equals(refAddr)) {
                                refName = name;
                            }
                        } catch (UnknownHostException e) {
                            // some stratum-2 servers sync to ref clock device but fudge stratum level higher... (e.g. 2)
                            // ref not valid host maybe it's a reference clock name?
                            // otherwise just show the ref IP address.
                            refName = NtpUtils.getReferenceClock(message);
                        }
                    }
                } else if (version >= 3 && (stratum == 0 || stratum == 1)) {
                    refName = NtpUtils.getReferenceClock(message);
                    // refname usually have at least 3 characters (e.g. GPS, WWV, LCL, etc.)
                }
                // otherwise give up on naming the beast...
            }
            if (refName != null && refName.length() > 1) {
                refAddr += " (" + refName + ")";
            }
            System.out.println(" Reference Identifier:\t" + refAddr);
     
            TimeStamp refNtpTime = message.getReferenceTimeStamp();
            System.out.println(" Reference Timestamp:\t" + refNtpTime + "  " + refNtpTime.toDateString());
     
            // Originate Time is time request sent by client (t1)
            TimeStamp origNtpTime = message.getOriginateTimeStamp();
            System.out.println(" Originate Timestamp:\t" + origNtpTime + "  " + origNtpTime.toDateString());
     
            long destTime = info.getReturnTime();
            // Receive Time is time request received by server (t2)
            TimeStamp rcvNtpTime = message.getReceiveTimeStamp();
            System.out.println(" Receive Timestamp:\t" + rcvNtpTime + "  " + rcvNtpTime.toDateString());
     
            // Transmit time is time reply sent by server (t3)
            TimeStamp xmitNtpTime = message.getTransmitTimeStamp();
            System.out.println(" Transmit Timestamp:\t" + xmitNtpTime + "  " + xmitNtpTime.toDateString());
     
            // Destination time is time reply received by client (t4)
            TimeStamp destNtpTime = TimeStamp.getNtpTime(destTime);
            System.out.println(" Destination Timestamp:\t" + destNtpTime + "  " + destNtpTime.toDateString());
     
            info.computeDetails(); // compute offset/delay if not already done
            Long offsetValue = info.getOffset();
            Long delayValue = info.getDelay();
            String delay = (delayValue == null) ? "N/A" : delayValue.toString();
            String offset = (offsetValue == null) ? "N/A" : offsetValue.toString();
     
            System.out.println(" Roundtrip delay(ms)=" + delay
                    + ", clock offset(ms)=" + offset); // offset in ms
        }
        public static void main(String[] args)
        {
            if (args.length == 0) {
                System.err.println("Usage: NTPClient <hostname-or-address-list>");
                System.exit(1);
            }
            NTPUDPClient client = new NTPUDPClient();
            // We want to timeout if a response takes longer than 10 seconds
            client.setDefaultTimeout(10000);
            try {
                client.open();
                for (String arg : args)
                {
                    System.out.println();
                    try {
                        InetAddress hostAddr = InetAddress.getByName(arg);
                        System.out.println("> " + hostAddr.getHostName() + "/" + hostAddr.getHostAddress());
                        TimeInfo info = client.getTime(hostAddr);
                        processResponse(info);
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
                }
            } catch (SocketException e) {
                e.printStackTrace();
            }
            client.close();
        }
    }
    la classe : TimeClient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    package examples.ntp;
    import java.io.IOException;
    import java.net.InetAddress;
     
    import org.apache.commons.net.time.TimeTCPClient;
    import org.apache.commons.net.time.TimeUDPClient;
     
    /***
     * This is an example program demonstrating how to use the TimeTCPClient
     * and TimeUDPClient classes.
     * This program connects to the default time service port of a
     * specified server, retrieves the time, and prints it to standard output.
     * See <A HREF="ftp://ftp.rfc-editor.org/in-notes/rfc868.txt"> the spec </A>
     * for details.  The default is to use the TCP port.  Use the -udp flag to
     * use the UDP port.
     * <p>
     * Usage: TimeClient [-udp] <hostname>
     * <p>
     ***/
    public final class TimeClient
    {
     
        public static final void timeTCP(String host) throws IOException
        {
            TimeTCPClient client = new TimeTCPClient();
        try {
              // We want to timeout if a response takes longer than 60 seconds
              client.setDefaultTimeout(60000);
          client.connect(host);
              System.out.println(client.getDate());
        } finally {
              client.disconnect();
        }
        }
     
        public static final void timeUDP(String host) throws IOException
        {
            TimeUDPClient client = new TimeUDPClient();
     
            // We want to timeout if a response takes longer than 60 seconds
            client.setDefaultTimeout(60000);
            client.open();
            System.out.println(client.getDate(InetAddress.getByName(host)));
            client.close();
        }
     
        public static void main(String[] args)
        {
     
            if (args.length == 1)
            {
                try
                {
                    timeTCP(args[0]);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                    System.exit(1);
                }
            }
            else if (args.length == 2 && args[0].equals("-udp"))
            {
                try
                {
                    timeUDP(args[1]);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                    System.exit(1);
                }
            }
            else
            {
                System.err.println("Usage: TimeClient [-udp] <hostname>");
                System.exit(1);
            }
     
        }
     
    }
    le problème c'est que je ne trouve Que des Classes Client : il n'y a pas de serveur ? dans NTP
    vu que j'ai pas compris le principe je ne sais pas comment exécuter l’exemple

    es que quelqu'un peut m'aider,pour compris le principe et faire ma propre Solution

    j'ai trouvé sur google code une Solution

    Les Classes De test

    merci d’avance

    merci pour n'import quelle reponse

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    en général on se synchronise sur un serveur de temps accessible sur Internet :

    sinon il y a une implémentation Apache dans ApacheDS je crois : org.apache.directory.server.ntp.NtpServer
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Merci ,
    alors si je comprends bien joel.drigo

    le role d'un serveur NTP c'est retourner l'heure ??

    merci pour ta reponse

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/10/2008, 19h59
  2. Synchronisation de l'heure Iseries
    Par fweiner dans le forum AS/400
    Réponses: 2
    Dernier message: 05/05/2008, 17h27
  3. Synchronisation de l'heure
    Par PierreAr dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 31/10/2007, 16h31
  4. Réponses: 2
    Dernier message: 19/07/2007, 11h50
  5. Synchronisation de l'heure des systèmes
    Par _shuriken_ dans le forum Administration système
    Réponses: 4
    Dernier message: 12/11/2006, 21h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo