2016-11-26 3 views
1

Unity에서 2 시간마다 플레이어 수명을 재설정해야하는 게임을 개발 중이며 부정 행위를 피하기 위해 인터넷 시간을 사용하려고합니다. 이를 위해 C#에서 간단한 방법을 사용하여 microsoft.com에서 DateTime을 가져 왔습니다. 문제는 때때로 연결이 실패하고, 이런 일이 발생하면 부울을 반환하기를 원하므로 System.DateTime.Now를 가져와 연결이 가능 해지면 인터넷 시간을 다시 확인할 수 있습니다. 나는 어떤 것을 시도했지만 아무 일도 없었다. 사용중인 코드는 다음과 같습니다.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

이것은 안드로이드 게임이며 때로는 사용자가 인터넷에 액세스 할 수 없거나 시간이 초과되는 경우가 있습니다. 이 경우 콘솔에서 다음을 throw합니다. WebException : 요청 시간이 초과되었습니다. System.net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult). 내가 알고 싶은 것은 사용자가 인터넷에 액세스 할 수 없거나 시간이 초과 될 때 {connectionFailed = true}를 취하는 방법입니다. – ronald677br

답변

2

오류가 발생하면 GetResponse가 예외를 throw합니다. 예를 들어 호스트를 확인할 수없는 경우입니다. 당신이 필요로하는 것은 그것을 잡아서 그것 후에 적절한 조치를 취하는 것입니다.

아래 코드에서 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