我正在开发一个关于Unity的游戏,需要每2小时重置玩家的生命,并且为了避免作弊,我正在尝试使用互联网时间。为此,我在C#上做了一种简单的方法,可以从Microsoft.com获取DateTime。问题是有时连接失败了,我想在发生这种情况时返回一个布尔,因此我可以获得系统。dateTime.dateTime.dateethe,并在连接可用后立即再次检查Internet。我尝试了一些事情,但没有任何效果。这是我正在使用的代码:
public DateTime GetInternetTime()
{
var myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.microsoft.com");
myHttpWebRequest.Timeout = 5000;
myHttpWebRequest.ReadWriteTimeout = 5000;
var response = myHttpWebRequest.GetResponse();
if (response == null)
{
dateTime = DateTime.Now;
connecionFailed = true;
}
string todaysDates = response.Headers["date"];
dateTime = DateTime.ParseExact(todaysDates, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal);
connecionFailed = false;
return dateTime;
}
请帮忙!我真的陷入了这个!
getResponse在发生错误时会引发异常。例如,如果无法解决主机。您所需要的只是抓住它并在此之后做适当的操作。
在下面的代码中,我处理WebException,但是在此方法中可能会发生其他一些例外。因此,您可以代替一般异常类。
public DateTime GetInternetTime()
{
var myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.microsoft.com");
myHttpWebRequest.Timeout = 5000;
myHttpWebRequest.ReadWriteTimeout = 5000;
try
{
var response = myHttpWebRequest.GetResponse();
string todaysDates = response.Headers["date"];
dateTime = DateTime.ParseExact(todaysDates, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal);
connectionFailed = false;
} catch(WebException)
{
connectionFailed = true;
dateTime = DateTime.Now;
}
return dateTime;
}