Unity,NTP时间被阻止

时间:2015-03-23 21:31:43

标签: time unity3d ntp

我使用Unity3D创建游戏。

我需要获得NTP时间,以便玩家不要通过将计算机时间设置为未来来作弊来获取奖金。

我可以获得桌面应用程序的时间,但是当我切换到Web Player时,它会被阻止。

有什么建议吗?

我的代码是:

static string[] servers = new string[] {
"time.nist.gov",
"time-b.nist.gov",
"time-a.nist.gov",
"nist1-ny.ustiming.org",
"nist1-chi.ustiming.org",
"ntp-nist.ldsbc.edu",
"nist1-la.ustiming.org" 
};

public static DateTime GetNISTDate(){
for (int i = 0; i < 7; i++){
try
{
StreamReader reader = new StreamReader(new System.Net.Sockets.TcpClient(servers[i], 13).GetStream());
serverResponse = reader.ReadToEnd();
Debug.Log(serverResponse);
reader.Close();
// Check to see that the signature is there
if (serverResponse.Length > 47 && serverResponse.Substring(38, 9).Equals("UTC(NIST)")) {
// Parse the date
int jd = int.Parse(serverResponse.Substring(1, 5));
int yr = int.Parse(serverResponse.Substring(7, 2));
int mo = int.Parse(serverResponse.Substring(10, 2));
int dy = int.Parse(serverResponse.Substring(13, 2));
int hr = int.Parse(serverResponse.Substring(16, 2));
int mm = int.Parse(serverResponse.Substring(19, 2));
int sc = int.Parse(serverResponse.Substring(22, 2));
if (jd > 51544)
yr += 2000;
else
yr += 1999;
date = new DateTime(yr, mo, dy, hr, mm, sc);
Debug.Log(date);
break;
}
}
catch{
}
}
return date;
}

1 个答案:

答案 0 :(得分:2)

我对Unity Web Player不熟悉,但这确实听起来像是same-origin policy问题。

您可能需要从加载代码的服务器中获取时间(这可能就像发出HTTP请求和解析the Date header一样简单;只记得disable caching)。< / p>

使用您自己的服务器作为时间源通常是一种更好的做法 - 公共NTP服务器,如those operated by NIST,由其所有者自愿运营,并由互联网上数百万人使用;没有比你必须承受更多的负担,这是一种很好的举止。