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?
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.
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
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.
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:
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?
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.
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.
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
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
Puesto que la velocidad de tranferencia, no es estable nunca, y que el timer tampoco es 100% estable, para sacar unos datos lo mas fiables posibles, seria enviando un archivo grande. Cuanto mas grande mas fiable será, ya que se cogera una media de la velocidad que ha habido durante el proceso, y el timer tendra una impresicion menor, al ser mucho mas tiempo.