2016-03-10 5 views
0

Для обнаружения подключения к Интернету я использовать простой класс:Обнаружение потери пакетов

public class Reachability { 
    class func isConnectedToNetwork() -> Bool { 
     var zeroAddress = sockaddr_in() 
     zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
     zeroAddress.sin_family = sa_family_t(AF_INET) 
     let defaultRouteReachability = withUnsafePointer(&zeroAddress) { 
      SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
     } 
     var flags = SCNetworkReachabilityFlags() 
     if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
      return false 
     } 
     let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
     let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
     return (isReachable && !needsConnection) 
    } 
} 

Тогда в моей проверки кода:

if Reachability.isConnectedToNetwork() == false { 
       print("error") 
      } 

Но это не достаточно для меня ... Возможно ли это, чтобы обнаружить потеря пакетов или что-то еще. Потому что, когда я имитировать эту связь:

enter image description here

я получил неправильные результаты. В моем приложении.

+0

iOS или OSX? Если вы используете iOS, вы можете использовать IOS Network Link Conditioner. Я думаю, вы не можете обнаружить потерю пакетов. Но вместо этого вы можете обнаружить потерянное сетевое соединение. Библиотеки, такие как AFNetworking, даже предоставляют механизм автоматического повтора. – Raptor

+0

Я создаю приложение ios – Arti

+0

Есть ли решение вроде: if network.isBad() {}?: D – Arti

ответ

1

Число потерянных пакетов не зависит от достижимости. Это можно считать временной потерей пакетов, а не отсутствием сетевого соединения. Достижимость заключается в том, что ваш 3G, WiFi или Mac ethernet включен, а не качество соединения. Поэтому эти результаты не ошибаются, но предназначены.

Смежные вопросы