我使用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;
}
答案 0 :(得分:2)
我对Unity Web Player不熟悉,但这确实听起来像是same-origin policy问题。
您可能需要从加载代码的服务器中获取时间(这可能就像发出HTTP请求和解析the Date
header一样简单;只记得disable caching)。< / p>
使用您自己的服务器作为时间源通常是一种更好的做法 - 公共NTP服务器,如those operated by NIST,由其所有者自愿运营,并由互联网上数百万人使用;没有比你必须承受更多的负担,这是一种很好的举止。