java ntp client_Java NTP客户端

ac17ddb57513ff2623266cdd3b3ce3a9.png

慕沐林林

我知道这是一个古老的问题,但是我注意到所有答案并未说明如何使用这些库。在这个答案中,我们将展示基本的实现及其背后的逻辑。一种简单的实现方法是使用Apache Commons Net库。该库将提供一个NTPUDPClient类来管理无连接NTP请求并返回一个TimeInfo实例。此实例应计算系统时间与NTP服务器时间之间的偏移量。让我们尝试在这里实现它:将Apache Commons Net库添加到您的项目中。  commons-net  commons-net  3.6创建NTPUDPClient该类的新实例。设置默认超时时间和InetAddressNTP服务器的超时时间。调用该NTPUDPClient.getTime()方法以TimeInfo从指定服务器检索具有时间信息的实例。computeDetails()用于计算和验证NTP消息包详细信息的调用方法。最后,获取offset并计算原子时间。这里我们有一个基本的实现:import java.net.InetAddress;import java.util.Date;import org.apache.commons.net.ntp.NTPUDPClient; import org.apache.commons.net.ntp.TimeInfo;public class NTPClient {  private static final String SERVER_NAME = "pool.ntp.org";  private volatile TimeInfo timeInfo;  private volatile Long offset;  public static void main() throws Exception {    NTPUDPClient client = new NTPUDPClient();    // We want to timeout if a response takes longer than 10 seconds    client.setDefaultTimeout(10_000);    InetAddress inetAddress = InetAddress.getByName(SERVER_NAME);    TimeInfo timeInfo = client.getTime(inetAddress);    timeInfo.computeDetails();    if (timeInfo.getOffset() != null) {        this.timeInfo = timeInfo;        this.offset = timeInfo.getOffset();    }    // This system NTP time    TimeStamp systemNtpTime = TimeStamp.getCurrentTime();    System.out.println("System time:\t" + systemNtpTime + "  " + systemNtpTime.toDateString());    // Calculate the remote server NTP time    long currentTime = System.currentTimeMillis();    TimeStamp atomicNtpTime = TimeStamp.getNtpTime(currentTime + offset).getTime()    System.out.println("Atomic time:\t" + atomicNtpTime + "  " + atomicNtpTime.toDateString());  }  public boolean isComputed()  {    return timeInfo != null && offset != null;  }}您将获得类似的内容:System time:    dfaa2c15.2083126e  Thu, Nov 29 2018 18:12:53.127Atomic time:    dfaa2c15.210624dd  Thu, Nov 29 2018 18:12:53.129

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值