test de velocidad en vb ( saber los kbps usando vb )

Iniciado por -Xenon-, 21 Diciembre 2005, 19:47 PM

0 Miembros y 1 Visitante están viendo este tema.

-Xenon-



buscando la forma de hacer un test de velocidad usando vb, con un cliente en un pc, y el servidor en otro distinto he intentado esto:

eso se mide kb por segundo, pues he probado a desde un cliente enviar una orden de que voy a empezar a enviarle "a"es
muchas y todo el rato con un bucle que repita un senddata "a", sabiendo que un caracter ocupa un byte, en el servidor cuando confirma quele va a empezar a llegar las "a"es, pone un timer a 3 segundos, y a continuacion coge las "a"es asi:

test = test + len(datos)

de forma que cada vez, que reciba datos, se almacene el tamaño en la variable long "test" y cuando termine el timer en vie una señal al cliente para que deje de mandar "a"es, entonces el servidor coge la variable test y la divide para 3 segundos, en teoria dando asi los Bytes por segundo....

pero no me funciona... aun enviando la señal de que pare de enviar "a", debe de quedarse pillado, por que luego el programa se queda como que no responde, y para colmo alos 3 segundos me pone que la variable test solo pesa 4 bytes...

lo estoy probando ahora mismo

alguna idea o solucion?
Cuando el ingenio se queda pequeño,
No basta con poner empeño,
Solo el talento consigue el diseño

jorson

yo pienso que seria mejor enviarle al servidor algun archivo de gran tamaño, y cuando acabe de recibirlo, dividir el tamaño del fichero entre el tiempo empleado.

lo de enviar byte a byte, aunque funcionase no se si seria muy fiable, por que cada vez que envia un paquete lo enviaria de 1 byte, de la otra forma envia paquetes mas grandes.

....Gusto....

mm la idea es hacerlo rapido :P
lo que estaba pensando es:
un ping es un paquete de cuantos bytes? ya que digamos q vos sos 200.225.354.628 (ya c q no existe eh!)
yo pongo en CMD ping 200.225.354.628 y al ratito me dice respuesta obtenida de ^^^^^^^^^^^^ retardo:500 ms
paquetes: 0%perdido, 100%recibido.
de esa manera, nop podriamos hacer un programa q haga lo mismo que el ping de windows solo que calcule un promedio entre los 4 valores q"recibe" mi pc y lo muestre en kbps??
saludos ! ;D
.:.~GuStO~.:.


jorson

probe tu idea, pero como yo pensaba asi no se puede, miren:


Haciendo ping a www.l.google.com [216.239.37.104] con 32 bytes de datos:

Respuesta desde 216.239.37.104: bytes=32 tiempo=153ms TTL=244

Respuesta desde 216.239.37.104: bytes=32 tiempo=154ms TTL=243

Respuesta desde 216.239.37.104: bytes=32 tiempo=153ms TTL=244

Respuesta desde 216.239.37.104: bytes=32 tiempo=156ms TTL=243



Estad¡sticas de ping para 216.239.37.104:

    Paquetes: enviados = 4, recibidos = 4, perdidos = 0 (0% perdidos),

Tiempos aproximados de recorrido redondo en milisegundos:

    m¡nimo = 153ms, m ximo =  156ms, promedio =  154ms


Quiere decirse que envia 32 bytes en 154ms que calculando me salen: 0,03125 kbytes en 0,154 segundos, osea: 0,2029 KB/seg.

Y no salen, pieso yo por que haciendo un ping, te indica el tiempo que tarda un paquete en ir y volver a la direccion.

Supongo que los paquetes que se envian normalmente serán de mas tamaño, y que antes de tener respuesta del paquete enviado, ya se este enviando otro.

#Borracho.-

Che lo que puedes hacer si es lo que entendi que vb ejecute comandos desde el programa pero con la consola de ms-dos

Salu2

P.D: No se si es lo que preguntaste...


Option Explicit


Sub cmdAccion_Click ()
    'Comprobar la etiqueta del volumen y mostrarla

    Dim i As Integer
    Dim sUd As String
    Dim sProg As String
    Dim sFic As String
    Dim sTmp As String
    Dim Hallado As Integer
    Dim sVolumen As String
    Dim sNumSerie As String

    Label1(3).Caption = "Procesando la información..."
    DoEvents

    sUd = Trim$(Text1.Text)
    i = InStr(sUd, ":")
    If i = 0 Then
        MsgBox "Debes especificar una unidad de disco."
        Unload Me
        End
    End If
    sUd = Left$(sUd, i)
    sFic = sUd & "\Files.txt"
    'Fichero para ejecutar el comando DIR
    sProg = sUd & "\~Files.bat"
    sUd = sUd & "\*.*"

    i = FreeFile
    Open sProg For Output As i
    Print #i, "Dir " & sUd & " >" & sFic
    Close i

    EjecutarPrograma sProg, "~Files"
    'Ya ha finalizado...
    'Abrir el archivo sFic
    '
    If Len(Dir$(sFic)) Then
        'Abrirlo
        i = FreeFile
        Open sFic For Input As i
        Do While Not EOF(i)
            Line Input #i, sTmp
            If InStr(sTmp, "volume") Then
                Hallado = True
                sVolumen = sTmp
                If Not EOF(i) Then
                    Line Input #i, sNumSerie
                End If
                Exit Do
            End If
        Loop
        Close i
        If Hallado Then
            'Obtener la etiqueta y el número de serie
            UltimaPalabra sVolumen
            UltimaPalabra sNumSerie
            If Len(sVolumen) = 0 Then
                sVolumen = "No tiene etiqueta de volumen?"
            End If
            If (Len(sNumSerie) = 0 Or InStr(sNumSerie, "-") = 0) Then
                sNumSerie = "No tiene número de serie?"
            End If
            Label1(3).Caption = sVolumen & " - " & sNumSerie
            Label2(0).Caption = sVolumen
            Label2(1).Caption = sNumSerie
        Else
            Label1(3).Caption = "No se encuentra la etiqueta del volumen..."
        End If
    Else
        MsgBox "No se ha podido crear el fichero: " & sFic
    End If
    'Borrar los archivos
    If Len(Dir$(sProg)) Then
        Kill sProg
    End If
    If Len(Dir$(sFic)) Then
        Kill sFic
    End If
    Text1.SetFocus
End Sub


Sub cmdSalir_Click ()
    Unload Me
    End
End Sub


Sub Form_Unload (Cancel As Integer)
    Set Form1 = Nothing
End Sub


Sub UltimaPalabra (sFrase As String)
    'De la cadena sFrase obtiene la última palabra
    'Realmente lo que haya desde el último espacio

    Dim i As Integer
    Dim sPalabra As String

    'Buscar el último espacio
    sPalabra = ""
    'Asegurarnos de no encontrar espacios al final de la cadena
    sFrase = Trim$(sFrase)
    For i = Len(sFrase) To 1 Step -1
        If Mid$(sFrase, i, 1) = " " Then
            sPalabra = Mid$(sFrase, i + 1)
            Exit For
        End If
    Next
    sFrase = Trim$(sPalabra)
End Sub



Este es un ejemplo de como usar una shell para ejecutar comandos de consola... espero que te sirva... :rolleyes:
Si nos quedamos en este mundo, que no sea con hambre...

....Gusto....

mm mi idea es hacer lo que hace el ping pero entre el cliente y el server, entonces mandar un paquete de 500 k x ej y ver cto tarda en ir y volver. me explico?
.:.~GuStO~.:.


NYlOn

Lo q se hace desde DOS es eso, un ping.


Yo tengo uno echo pero todavia no lo probe... va lo prove en mi pc, pero no va a tardar mucho en responder xDDDD


La q hace es, el cliente manda un paquete de 32bytes y las 1ras 4 lineas de ese paquete de datos dice PING, entonces cuando el servidor recibe datos que dicen PING en los primeros 4 caracteres, envia otro paquete de 32bytes con cabecera PONG (esto del PING y el PONG al principio del paquete es porke, en mi caso, utilizo el Socket para varias cosas, entocnes necesito identificar que es lo q llega).
Y bueno, cuando se envia el paquete desde el cliente un timer empieza a contar y termina cuando llega el PONG. Despues ese resultado se puede dividir por 2, y nos daria cuanto tarda en llegar el paquete al cliente, y cuanto en volver.

jorson

Sigo pensando que para medir la velocidad no se puede hacer usando ping, y menos usando paquetes de 32 bytes, aun como dice ...gusto... con paquetes de ping mas grandes, puede que funcionase mas o menos.

....Gusto....

el tema es:
si tiene 56K o 128K es evidente mandar un mega, pero creo que 500k se pueden mandar. el otro drama es que si su isp bloquea pings o esas cosas, no se si existe.-..
salu2 ;D
.:.~GuStO~.:.


-Xenon-


descargando una pagina php que te mide la velocidad, he visto que el tamaño de los datos que envia son unos 125k, 129k, mas o menos, asi que con eso sobra, problemas? que el timer del VB no es 100% exacto, y para esto casi lo ideal es hacerlo en milisegundos, y como digo el timer del vb, no nos daria una medida fiable, ( creo yo ), asi que aun de todas formas lo probare con ese tamaño he intentando ajustar el timer al maximo, en breve ( uno o dos dias ) posteo el codigo y aver si funciona
Cuando el ingenio se queda pequeño,
No basta con poner empeño,
Solo el talento consigue el diseño