2016-11-06 70 views

回答

0

网络时间协议(NTP)允许同步计算机系统的时钟。您可以连接到任何一个NTP服务器请求当前时间

NTPUDPClient在包阿帕奇百科全书提供了NTP客户端

使用

import org.apache.commons.net.ntp.NTPUDPClient; 
import org.apache.commons.net.ntp.TimeInfo; 


public long getRemoteNTPTime() { 
    NTPUDPClient client = new NTPUDPClient(); 
    // We want to timeout if a response takes longer than 5 seconds 
    client.setDefaultTimeout(5000); 
    //NTP server list 
    for (String host : hosts) { 

     try { 
      InetAddress hostAddr = InetAddress.getByName(host); 
      TimeInfo info = client.getTime(hostAddr); 
      return info.getMessage().getTransmitTimeStamp().getTime(); 

     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    client.close(); 

    return null; 

} 

配置几台主机,以避免如果一个人下来。在您的主机附近寻找服务器以减少网络延迟。例如

ntp02.oal.ul.pt 
ntp04.oal.ul.pt 
ntp.xs4all.nl 
+0

我正在做一些测试,我有一个疑问,有什么区别info.getReturnTime();和info.getMessage()。getTransmitTimeStamp()。getTime()?我的目的是了解服务器中的当前时间。谢谢 – Larx

+0

'info.getReturnTime()'是你本地机器的时间。 '信息。 getMessage()。getTransmitTimeStamp()。getTime()'是NTP服务器的时间。并且要在收到消息后计算本地机器中的当前时间,请使用'info.getMessage()。getReceiveTimeStamp()。getTime()' – pedrofb