Página 1 de 1

¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Sep 2011, 14:32
por Jonny
Hola

en este post:
http://www.emesn.com/autoitforum/viewto ... .au3#p5248

colgué hace tiempo una UDF que hice, con varias funciones. Una de ellas, calculaba la velocidad de la conexión a internet como hacen muchas webs. Pero aquella función era un poco incómoda de usar, pues había que hacer uso de un script en PHP que adjuntaba en la UDF, pero había que disponer de un servidor web, con soporte PHP, y que además no tuviera limitado el tráfico...

Así, que ahora quiero hacer esa función, pero mejor. Que no requiera de ese script, que calcule la velocidad de bajada, y a poder ser de subida de la conexión a internet.

He intentado hacerlo por la vía fácil, accediendo al servidor de alguna web de las muchas que hay que ofrecen este servicio, como si la función fuera el navegador y obtener el resultado, y extraerlo del HTML... Pero no es tan sencillo. En la mayoría de test de velocidad dicen que hay que tener flash, otros que no lo requieren están hechos medio con php y medio con javascript, otros tardan muchísimo en hacer el test...

Así, que he pensado hacerlo yo, sin usar ningún test de esos.

Por lo que he leído, y visto en las explicaciones de todos esos test sobre como funcionan, la idea es, descargar un mega de datos de un servidor, y calcular el tiempo que tardas en descargar ese mega, esa sería en líneas generales la forma de hacer el test de la velocidad de bajada si no estoy equivocado. Para hacer el test de subida, sería lo mismo, pero en vez de bajar un mega de datos, subirlo a un servidor (corregidme si me equivoco).

La duda que tengo, aunque creo que se la respuesta es, si tardaría lo mismo la función en recibir mil carácteres (1000 bytes) de uno en uno, que a la vez haciendo:

Código: Seleccionar todo

TcpRecv($Shock, 1000)
Diría que tardaría lo mismo. De hecho ¿Como tendría que hacerlo?. Lo mismo para la subida...

Sabiendo que la idea es transferir mil bytes, se me ocurre que no es necesario que sea un archivo binario, de sonido, imagen... bastará con que sean mil bytes, que pueden ser mil a's, o el código de una página web hasta mil carácteres ¿es así?.

Si es así, se me ocurre que puedo hacer el test de velocidad por ejemplo con Google, un servidor que funciona siempre y no tiene limitado el tráfico de bajada, ambas cosas garantizadas; por lo que el test daría buen resultado dentro de lo que cabe.
La idea es, descargar hasta mil carácteres del código de la web de Google y calcular el tiempo que tarda en hacerse la descarga. Luego ya, calcularlo en kbps, que es como suelen dar el resultado los test de velocidad.

¿Estaría bien así, o se os ocurre una forma mejor de hacerlo?.

Salu2!

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Sep 2011, 14:37
por BasicOs
Eso es más complicado, las empresas que lo miden suelen tener varios servidores con archivos específicos de un tamaño y hacen un prueba de descarga. Más facil puede ser que busques uno de estos que te devuelva los datos en formato texto, o como respuesta a una solicitud php o una llamada una página, en ese momento puedes bajar y capturar del texto html, y separar las cifras que te interesen, dentro de los corchetes o separadores que identifiques
aquí hay algunos pero suelen ser Java: :smt030

http://www.adsl4ever.com/test/

Salu22:)

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Sep 2011, 16:02
por Jonny
claro. Ese es el problema, que en modo texto no he encontrado ninguno. Pero ¿que diferencia hay entre descargar un paquete (archivo que ocupe un mega) (digo un mega porque es lo que he visto normalmente que se descarga para hacer la prueba) y descargar mil bytes de una web?.

Salu2!

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Sep 2011, 17:55
por BasicOs
Si quieres hacer algo aproximado no hay problema si el servidor está bien, y no es lo mismo un servidor en china que en tu ciudad, es posible que te surjan otros problemas, pero si alguien lo tiene hecho, no es necesario que reinventes la rueda, pero puedes comparar tus resultados con los que te di en el enlace para ver si te cuadra,
Salu22:)

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Sep 2011, 18:35
por Jonny
Vaya. Lo de la distancia es cierto, puede influir, pero imagino que Google, igual que a mi, a todo el mundo le cargará rápido...
Seguramente, Google tenga servidores hubicados en varios países, para servir las páginas según el país del cliente (hablo suponiendo). De ser así, como la función se ejecutaría en el pc del usuario, no en un servidor montado por mi, ese problema debería estar resuelto.

NO es por querer hacerlo, es, que como digo aprovecharme de los servidores que ofrecen ese servicio no se me ocurre como hacerlo, porque el que no está hecho en java, está en flash, el que no imprime texto en javascript...

Salu2!

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 21 Sep 2011, 01:09
por Chefito
Jonny escribió:claro. Ese es el problema, que en modo texto no he encontrado ninguno. Pero ¿que diferencia hay entre descargar un paquete (archivo que ocupe un mega) (digo un mega porque es lo que he visto normalmente que se descarga para hacer la prueba) y descargar mil bytes de una web?.
La diferencia??? El tamaño :smt005 . 1024 bytes es un 1 kbyte, y 1024 kbytes es un mega. 1024 más grande, no te parece? :smt003 .
Yo creo que daría igual los datos que te bajases. Lo que pasa que supongo se suela utilizar archivos porque pueden ser más grandes y se puede hacer una mejor media. En cambio, bajarte el html de una página sería rapidísimo y muy dificil hacer una media fiable. Por ejemplo, la carga de google es inmediata. No creo que puedas hacer nada fiable con eso :smt001 .
Y, por otra parte, tedrías el problema de subir datos para calcular la subida :smt017 .
BasicOs escribió:aquí hay algunos pero suelen ser Java: http://www.adsl4ever.com/test/
Jejeje. Yo suelo utilizar http://www.internautas.org/testvelocidad/ que está en flash. Este también te da el resultado final en formato texto. Se podría sacar facilmente. Otra cosa sería que quisieses que se viese todo el proceso. Puedes aprovechar estos que están hechos y insertarlos en una ie embeido. Además, algunos creo que son configurables. Es cuestión de meterte en el código y mirar como acceden a estos objetos. Puede que fuese la mejor solución.

La cuestión que planteas de si se podría hacer uno propio en autoit. Respuesta: Sí, y de varias maneras. Algunas mejor que otras. Según lo que te quieras molestar.....como siempre.
Ante todo tendrías que buscar datos (digamos un archivo) de una página importante, que no tenga problemas de conexión y muy buen ancho. Ejemplo: microsoft, softonic, sun, dell, etc etc etc. Puedes buscar un archivo de un tamaño a tu medida para ser descargado. Con Inetget, inetinfo, inetclose puedes bajar, recuperar la información y cerrar el inet. Yo pondría el parámetro background=1 de inetget para que bajase de forma asíncrona y poder recuperar la información con inetinfo para poder hacer el contador dinamicamente. Supongo que puedas cortar la bajada con inetclose (nunca lo he probado) cuando lleges a una cantidad de bytes bajados (los que te interesen). Digo esto último por si no has encontrado un archivo a tu medida y es más grande.
Hay otras formas que seguramente son mejores pero más complicadas. Se pueden mandar cabeceras diciendo la cantidad de bytes que te quieres bajar de un archivo, página web, etc. Esto se puede hacer con las udfs winhttp, wininet, más complicado con udf http, también directamente con el objeto winhttp.winhttprequest.5.1, o MSXML2.XMLHTTP entre otros, y seguro que con más métodos que utilicen estos protocolos (Ejemplo: ocx o api winsock).
Logicamente también se puede hacer directamente con TCPRecv y tcpsend, pero es más complicado (mira como manda las cabeceras las funciones de la udf http). Personalmente me gustó mucho la librería winhttp :smt002 .

Saludos.

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 21 Sep 2011, 14:01
por Jonny
hum...

Miraré como hacerlo con las udf's que dices, o directamente con las funciones TCP de AutoIt.

¿Las funciones TCP de AutoIt no son en realidad las apis WinSock?.

Salu2!

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 21 Sep 2011, 14:38
por BasicOs
Posiblemente, las funciones de Autoit lo que hacen frecuentemente es que usan funciones y dlls internas del windows, rehaciendo y facilitando la sintaxis y el uso de estas para la programación a alto nivel (más sencilla, rápida y eficiente).
Por eso normalmente no se necesita instalar un dll, y por eso los ejecutables son tan pequeños porque usan los ficheros mismos del windows, teniendo la ventaja que es lo mismo que usa el mismo sistema operativo siendo muy testeado y probado, aplicando conocimientos que puedas tener de otros lenguajes (posiblemente use el Winsock).
Para saberlo, puedes bloquear ese servicio o dll y si no te funciona, entonces es que era este, si lo necesitas saber claro. :smt025 :smt002

Salu22:)

Re: ¿Como medir la velocidad de la conexión a internet?

Publicado: 20 Ago 2018, 14:45
por mikewal
Hola! Yo uso este https://www.comparar-adsl.com/speedtest/index.html y me funciona siempre de lujo!