【发布时间】:2015-02-20 16:08:46
【问题描述】:
我正在使用 Java 并且正在制作游戏。在这个游戏中,实时是非常重要的部分。 出于这个原因,我正在尝试使用 Ntp 获取实时。
我在网上找到的是这段代码。
import java.net.InetAddress;
import java.util.Date;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
public class test{
public static void main(String args[]) throws Exception{
String TIME_SERVER = "time-a.nist.gov";
NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getReturnTime();
Date time = new Date(returnTime);
System.out.println("Time from " + TIME_SERVER + ": " + time);
}
}
我的问题是,使用这个,系统仍然得到 System.currentMillis();因为它实际上会打印您本地机器收到时间消息的时间。因此,如果玩家将他的桌面时间更改为未来,游戏时间也会更改。
如果有人可以提供帮助以获取实时信息,我将非常感激。 附:我没有服务器,我的游戏会在 Kongregate 上玩,数据会在玩家的电脑上。
提前致谢。
【问题讨论】:
-
在内部运行您自己的时钟。比较你应该得到的时间。您实际得到的时间,如果有很大差异,请致电 shenaningans。
-
getReturnTime没有给你服务器的时间,它给你本地机器接收到消息包的时间。(根据javadoc)。 -
这就是
getDelay()和getOffset()方法的用途吗?