2015-10-19 51 views
2

即使該域不存在,在NetworkReachability上調用'GetFlags'始終會返回'Reachable'。我將附上完整的測試解決方案,但以下 代碼應導致「失敗...」,但會導致「成功=真」。Xamarin NetworkReachability錯誤報告可達性

該代碼基於Reachability示例。

public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 
     // Perform any additional setup after loading the view, typically from a nib. 

     string host = "http://nonsense.test12345679.com"; 

     using (var r = new SystemConfiguration.NetworkReachability (host)) { 
      NetworkReachabilityFlags flags; 

      if (r.TryGetFlags (out flags)) { 
       _label.Text = "Success = " + IsReachableWithoutRequiringConnection (flags); 
      } else { 
       _label.Text = "Failed to get flags "; 
      } 

     } 
    } 

    public bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags) 
    { 
     // Is it reachable with the current network configuration? 
     bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0; 

     // Do we need a connection to reach it? 
     bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0 
      || (flags & NetworkReachabilityFlags.IsWWAN) != 0; 

     return isReachable && noConnectionRequired; 
    } 

如果切換設備進入飛行模式然後可達是正確 返回假。

我正在測試iPad Air,iOS 9.0.2和最新的穩定Xamarin。

回答

4

我沒有直接使用該功能;但你有沒有嘗試nuget包連接? https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Connectivity。我試過了,它似乎工作得很好。它具有測試特定端點是否可達的方法。

bool canConnect = CrossConnectivity.Current.IsConnected 
    && await CrossConnectivity.Current.IsRemoteReachable(host, portInt)); 
+0

看起來它使用相同的可達性類在連接類中的一些額外的插座測試https://開頭的github .COM/jamesmontemagno/Xamarin.Plugins /樹/主/連接/連接/ Connectivity.Plugin.iOS。你可以在沒有Xamarin.Forms的情況下使用插件嗎? –

+0

是的。一些插件專門用於Xamarin.Forms和其他可用於任何Xamarin應用程序。 – valdetero

4

iOS系統配置框架的Reachability實際檢查,看看是否主機是活的(即它不是平/ ICMP/HTTP/...考)。

遠程主機被認爲是可到達當數據分組,通過一個 應用到網絡棧發送的,可以離開本地設備。 可達性並不保證數據包實際上會被主機接收到 。

iOS SCNetworkReachability Reference

也是一個不錯的等等有關的可達性標誌A /問:How to interpret NetworkReachabilityFlags in Xamarin.iOS?

+0

我沒有使用SCNetworkReachability。我將我的實現放在正確交織標記的示例Xamarin代碼上。 https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs –

+0

?... SystemConfiguration.NetworkReachability類是本機iOS類的包裝器 – SushiHangover

+0

啊,我的錯。我仍然不相信我的例子會導致「可達」,因爲數據包不應該離開設備。 –