2010-11-29 22 views
2

J'ai deux PC connectés par LAN. Lorsque l'utilisateur modifie l'heure (via mon application) sur un, j'aimerais que l'heure sur la seconde soit également mise à jour (ou que la seconde machine puisse interroger la première). Il n'y a pas de serveur, pas d'internet. Quelle est la meilleure façon de faire cela?Temps de synchronisation entre deux PC via TCP/IP, pas de serveur

OS: XP intégré.
Framework: .Net 3.5

Répondre

1

Si vous ne pouvez pas utiliser le serveur NTP, vous devez l'écrire vous-même.

  1. Les deux applications implémente un service WCF et sont un client de l'autre;
  2. L'application dont l'heure locale a été modifiée en avertit l'autre et envoie un DateTime;
  3. L'application qui reçoit le DateTime mis à jour change l'heure locale (mais sachez que votre application aura besoin de privilèges plus élevés pour le faire car vous devez le faire via du code non géré);

Si vous n'avez pas besoin de beaucoup de précision, vous avez terminé. Si vous avez besoin d'une plus grande précision, vous devrez estimer le temps perdu entre l'envoi des données et les arrivées et ce n'est pas trivial.

+0

Simone: Eh bien, pour estimer une perte de temps, vous pouvez faire un ping. (Le ping moyen sur deux ordinateurs connectés au réseau local est cependant assez marginal.) – Patrick

1

Une solution de faible technicité pourrait être d'exécuter la commande NET TIME \\[OtherPC] /SET sur la machine qui doit être mise à jour.

Vous pouvez éventuellement configurer la machine pour l'appeler à un certain intervalle.

S'il vous plaît noter, je l'ai seulement essayé sur des machines Windows normales, mais je pense que cela fonctionnerait également sur embarqué. Editer: En regardant autour il semble que XP Embedded pourrait supporter WMI, si c'est le cas et qu'il a la classe Win32_OperatingSystem et sa méthode SetDateTime, votre application pourrait faire cet appel à l'ordinateur distant et vous pourriez éviter d'avoir à interroger pour changements.

+0

Merci, je vais leur donner à la fois un essai – Benjol

+0

Hm, [avait un problème] (http://stackoverflow.com/questions/4311936/system-error -5-has-occur-access-denied-when-using-net-time-remote-set) avec la première idée, en ce sens que nous avons des mots de passe vides, donc nous avons un accès refusé. Je vais essayer la deuxième option. – Benjol

0

Est-il possible de désigner l'une des machines comme serveur NTP? et donc utiliser un système de serveur NTP standard pour que vous n'ayez pas à écrire le vôtre.

Bien que je ne suis pas familier avec XPe ce lien Got the time? semble avoir tous les mots à la mode nécessaires