2012-02-29 17 views
8

Sé con accesibilidad que puede verificar si está conectado a Internet. Pero, ¿hay alguna manera de determinar la velocidad de esa conexión? Estoy tratando de calcular la velocidad de carga y la velocidad de descarga por separado.Determine la velocidad en Internet mediante programación

¿Cómo se determina la velocidad en internet programáticamente?

+2

No responde a su pregunta, sino como un aparte, en mi mente una aplicación debe ser capaz de soportar lo que sea velocidades están disponibles en la práctica, las personas conectan el mismo dispositivo a múltiples fuentes de Internet (WiFi en casa o en el trabajo, 3G fuera y alrededor); e incluso con una sola fuente, las velocidades en la práctica pueden cambiar rápidamente. –

+0

¿Es posible ahora medir la velocidad de internet o la potencia wifi? – Imran

Respuesta

4

Si usa NSURLConnection para tomar un archivo grande (digamos, 1 MB o más), puede usar un delegate para rastrear el progreso de la descarga intermedia.

Específicamente: Si mide la diferencia en bytes descargados y la diferencia de tiempo entre llamadas al delegado, puede calcular la velocidad en bytes por segundo (u otra unidad de tiempo).

+2

NB: si su aplicación intenta descargar> 1MB en mi conexión 3G, solo para determinar si es * slooooow *, no seré feliz (sin embargo, mi proveedor podría ser). De hecho, me sentiré violentamente descontento de que estés consumiendo inútilmente mi escaso límite de datos; aún más si haces eso repetidamente. (Si está midiendo la (s) transferencia (s) de datos que realmente necesita la aplicación, tomará un tiempo, pero lo administraré) – Piskvor

+1

Oh, seguro. Pero esto podría proporcionar una velocidad constante de descargas normales que se producen en el transcurso de la aplicación haciendo su actividad habitual, por ejemplo. O si la aplicación es una aplicación de prueba de red, el usuario final la ejecutará sabiendo que solicitará un archivo grande a través de la conexión de red. Entonces, yo diría que todavía es un enfoque útil incluso para conexiones celulares, si se usa de forma inteligente y apropiada ... –

+0

Sin duda alguna. – Piskvor

2

paso 1: Tome la URL de archivo descargable y configúrela con un NSURLSession y su método dataTaskWithUrl.

paso 2: Integre el método NSURLSessionDelegate, NSURLSessionDataDelegate en su controlador.

paso 3: Tome dos CFAbsoluteTime variable que almacene Startime y asignar CFAbsoluteTimeGetCurrent() y segundo uno stopTime en didReceiveData: método Delegado.

paso 4: rápidos cuentan como esto

CFAbsoluteTime elapsedTime = stopTime - startTime; 
    float speedOfConnection = elapsedTime != 0 ? [data length]/(stopTime - startTime)/1024.0/1024.0 : -1; 
+0

¡Instrucciones claras, gracias! – ArtStyle

Cuestiones relacionadas