2013-06-01 33 views
8

幫助我瞭解使用網絡鏈路調節器測試可達性代碼時所看到的情況。這裏是我的香草可達代碼:使用Network Link Conditioner測試100%數據包丟失的可達性:幫助我瞭解發生了什麼

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; 
NetworkStatus netStatus = [wifiReach currentReachabilityStatus]; 

switch (netStatus) 
{ 
    case NotReachable: 
    { 
     NSLog(@"Access Not Available"); 
     break; 
    } 

    case ReachableViaWWAN: 
    { 
     NSLog(@"Reachable WWAN"); 
     break; 
    } 
    case ReachableViaWiFi: 
    { 
     NSLog(@"Reachable WiFi"); 
     break; 
    } 
} 

現在,當我測試使用「100%的損失」預設使用網絡鏈接潤髮這段代碼 - 的netStatus值是ReachableViaWWAN,這是我沒想到。我讀了很多關於Reachability並沒有真正測試連通性的抱怨,而是測試了連通性的潛在。所以這裏是我的問題:

預設的「100%損失」允許DNS請求通過Apple服務器,但不讓任何數據包通過?

+1

面對同樣的問題 - 你找到了解決方案嗎? – fatuhoku

+0

每個使用Reachability檢查網絡連接的人都會遇到同樣的問題。對我也是。 – Sandy

回答

1

這可能與事實有關,即可達性不能保證數據包能夠真正到達目標主機。它是關於本地網絡配置(接口向上/向下)以及是否可以發送數據包。

從蘋果公司的SCNetworkReachability Reference

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

所以如果接口啓動並且Reachability可以發送一個包,它就會滿足並返回狀態可達。

從蘋果的開發者指南Why Networking is hard

重要:SCNetworkReachability API並不打算用作確定網絡連接預檢機制。您通過嘗試連接來確定網絡連接。如果連接失敗,請查閱SCNetworkReachability API以幫助診斷故障原因。

相關問題