2016-11-26 67 views
1

我正在Unity上開發一款遊戲,每2小時需要重置玩家的生命,並避免作弊我試圖使用互聯網時間。爲此,我在C#上使用了一個簡單的方法從microsoft.com獲取DateTime。問題是,有時連接失敗,我希望它發生這種情況時返回一個布爾,所以我可以得到System.DateTime.Now,並儘快連接可用時再次檢查Internet時間。我嘗試了一些東西,但沒有奏效。這裏是我使用的代碼:當連接失敗時,讓HttpWebRequest.GetResponse()返回一個值

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

請解釋「連接失敗」 - 你得到了什麼確切的錯誤信息,以及代碼行。 – PhillipH

+0

這是一款Android遊戲,有時用戶無法訪問互聯網,或者只是超時。發生這種情況時,控制檯會拋出:WebException:請求超時System.net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)。我想知道的是當用戶無法訪問互聯網或者超時時如何獲取{connectionFailed = true}。 – ronald677br

回答

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; 
    } 
+0

謝謝你的幫助!這真的有用! – ronald677br