我在Unity上开发一款需要每2小时重置播放器生命的游戏,并避免作弊我尝试使用互联网时间。为此我在C#上创建了一个简单的方法来从microsoft.com获取DateTime。问题是有时连接失败了,我希望它在发生这种情况时返回一个bool,所以我可以获得System.DateTime.Now并在连接可用时再次检查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;
}
请帮忙!我真的坚持这个!
答案 0 :(得分:2)
GetResponse会抛出异常。例如,如果主机无法解析。你需要的只是抓住它并在它之后采取适当的行动。
在下面的代码中我处理WebException,但在此方法中可能会发生一些其他异常。所以你可以改为普通的Exception类。
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;
}