2011-05-04 252 views
2

我已經看了蘋果可達樣品,並從「iPhone開發者的烹飪書」(iphone)特定ip /端口的可達性測試?

這裏另一個樣品是步驟測試與給定的IP /端口的IP /端口的可達性

  1. 結構sockaddr_in的變量。
  2. 調用SCNetworkReachabilityCreateWithAddress與地址
  3. 調用SCNetworkReachabilityGetFlags並查看是否設置了kSCNetworkFlagsReachable。

我發現無論有效的(有效範圍)ip /端口我測試,我的代碼說它是可達的,即使他們實際上不可達我ping或telnet測試時。
(我所看到的其他SO帖裏可達性測試,以特定的IP總是成功) Reachability reachabilityWithAddress does not work

是SCNetworkReachability ..調用只檢查參數的有效性(IP地址或主機名)?即他們是否真的發送一個數據包(或連接)到給定的地址來測試可達性?

我可以自己實現異步連接超時,但是超時不應該被蘋果評論者拒絕多長時間(我擔心是否需要太長時間,蘋果評論者可能會認爲我的應用不是處理網絡可達性在所有)

謝謝

+1

http://stackoverflow.com/questions/5874445/ios-network-reachability-doesnt-seem-to-be-working/5875059#5875059可達性不會幫助你。 – Joe 2011-05-04 16:51:53

+0

@joe:啊,謝謝,「能夠離開本地設備」是什麼意思?這是一個網絡問題,我猜。這是否意味着ip被路由到其他計算機,但不知道它是否會成功到達地址? (因爲本地路由表可能沒有足夠的路由信息​​在任意的IP地址,並將轉發給其他主機,我懷疑) – eugene 2011-05-05 04:08:24

+0

@joe:蘋果不會拒絕應用程序沒有檢測到主機的上/下?只是驗證互聯網連接正常? – eugene 2011-05-05 07:37:34

回答

2

要根據上述意見回答你的問題,根據SCNetworkReachability Reference

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

這將無法檢查您的服務器的狀態,但只是確保它可以獲取數據包。

如果您的應用程序出現任何網絡相關問題,請檢查以查看Internet是否可用使用可訪問性是第一步,Apple希望您的應用程序優雅地失敗。如果可達性失敗,則可以假設您不能夠使用服務器並立即提醒用戶。接下來的步驟是正確處理服務器返回的錯誤,例如400錯誤請求,404找不到文件,設置合理的超時時間,以及在長時間下載期間不會阻止UI,同時顯示某種狀態指示器。

+0

可達性然後,名字很差。這是誤導...可達性檢查主機名暗示我的iPhone可以ping我選擇的主機,看看主機是否回覆。那麼,所有可達性都會以程序化方式反映您的wifi圖標或4G圖標是否顯示在屏幕上(減去GUI圖標未反映真實底層網絡狀態的時間)。可達性意味着iPhone在線,並準備好採取行動。而已。它不能幫助你找出你公司的服務器停機的情況,而像google.com這樣的24-7網站已經啓動。那是對的嗎? – user798719 2013-06-08 21:49:06