【问题标题】:Synchronize time with C# application through Java通过 Java 与 C# 应用程序同步时间
【发布时间】:2012-02-14 12:28:39
【问题描述】:

我有一个在 Debian OS 上运行的 Java 应用程序并与一个 Windows C# 服务器程序通信。我的 Java 应用程序将通过 TCP/IP 连接到 C# 服务器程序。我现在面临的一个问题是我的 Debian OS 系统时间总是比 Windows Server 系统时间慢。这两个应用程序大多运行在一个无法访问 Internet 的内部网络中。

  1. 请问有什么方法可以同步这两个应用程序之间的时间吗?
  2. 我阅读了有关 NTP 的信息,Java 可以使用 NTP 与 C# 程序同步时间吗?
  3. C# 程序必须作为 NTP 服务器运行吗? (有什么办法吗?)
  4. 如果只是写这两个应用程序之间的消息交换,会不会有什么问题?

如果有人可以提供研究实现的链接,将不胜感激。

【问题讨论】:

  • 是的,Java 可以使用 NTP。查看 Apache Commons Net commons.apache.org/net
  • 如果两个应用程序都在内部网络中运行并且无法访问互联网怎么办?
  • 它们可以通过内部网络相互通信吗?
  • 是的,他们可以通过私有IP相互通信。他们的ip是192.168.xxx.xxx

标签: c# java ntp


【解决方案1】:

最好的办法是运行您自己的本地 NTP 服务器,然后将两个盒子独立地同步到您的本地 NTP 服务器。您甚至可以在其中一个盒子上运行服务器。然后,您将拥有一个通用的时序基准,可以根据该基准进行操作。

或者,如果您无权访问或支持执行此操作,为什么不在系统之间传输的数据包中发送时间。然后,您将获得了解机器之间差异所需的信息。 (这并没有考虑到盒子之间的任何传输延迟,但它可能足以完成工作。)

【讨论】:

    【解决方案2】:

    您的网络应该有一个集中的 NTP 服务,该网络中的所有其他时钟都可以与该服务精确同步。理想情况下,NTP 服务器会根据 Internet 时间标准自行同步,但无论是否同步,都应该是整个网络的“唯一且唯一的真相来源”。

    这句古老的格言字面意思在这里适用:“一只手表的人总是知道现在几点了;一个带着两只手表的人永远不知道。”

    您的应用程序尝试管理时间同步是不合适的,即使它以某种方式拥有这样做的必要权限。 (而且它不应该!!)相反,它应该要求所有系统的时钟必须始终与一个主源正确同步。这应该是它的强制性先决条件,而不是它的个人责任。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 2016-07-31
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多