border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 18-09-2007, 17:28:38
Junior Member
Site Admin
 
Registrado: sep 2007
Posts: 6
el_trocha Valoración +2
Predeterminado PROGRSS BAR Necesito ayuda.......POR FAVOR

Mirad camaradas, tengo el siguiente codigo en mi aplicacion y no consigo hacer que mi progress bar funcione y no se por que.

Espero me podais ayudar.


CLIENTE:

Private Sub btdescarga_Click() 'boton que le dice al servidor que inicia la descarga del archivo de esa ruta que hemos introducido en un txtbox

rutadestino = "C:\Documents and Settings\Armando_Bollos\Mis documentos\Mis archivos recibidos\Archivos Recibidos\" & fileselect

Open rutadestino For Binary As #2

y = "tamaño-"
wc.SendData y & txtruta.Text 'enviamos la ruta del archivo al server.

donde = "tamaño" 'Le pedimos que mande el resultado al case tamaño del datarrival

LLEGADA AL SERVER DE LA INFORMACION:


Case "tamaño"

rutafile = vdatos(1)

Call tamaño



Private Sub tamaño()

Dim size As String

Open rutafile For Binary Access Read As #3

size = CStr(LOF(3)) ' calculamos su tamaño

Close #3

ws.SendData size ' Envia al cliente el tamañodel archivo

End Sub

LLEGADA AL CLIENTE DE LA INFORMACION:

Case "tamaño"

tamañofile = datos 'Meto en esa variable el tamaño del archivo
PB.Min = (datos - datos) ' Pongo elminimo de la barra de pregreso
PB.Max = datos ' pongo el maximo de la barra de progreso

PB.Value = PB.Min ' establezco el valor de la barra de progreso
sizefilerecibido = 0 ' establezco el valor que ira sumando los bytes que vayan entrando

y = "descarga-"
wc.SendData y & txtruta.Text 'envio al server que puede empezar a enviar datos

donde = "descarga"

LLEGADA DE DATOS AL SERVER :

Case "descarga"

On Error GoTo errores

Dim tamañofile As Long

rutafile = vdatos(1)

Open rutafile For Binary Access Read As #2
tamañofile = LOF(2)
ReDim file(tamañofile - 1)
Get #2, , file

ws.SendData file
ws.SendData "Fin"

Close #2

End Sub


LLEGADA DE DATOS AL CLIENTE:

Case "descarga"

On Error Resume Next

Put #2, , datos

sizefilerecibido = sizefilerecibido + bytesTotal 'Sumo a la variable los datos que van entrando

PB.Value = sizefilerecibido 'asigno el valor de la variable al valor de la progres bar

If Right(datos, 3) = "Fin" Or datos = "Fin" Then

If sizefilerecibido >= sizefile Then

Close #2

sizefilerecibido = 0

PB.Value = PB.Max

MsgBox "Descarga Finalizada", vbOKOnly

End If

PB.Value = 0

End If


Espero me podais ayudar. Un saludo. Muchas gracias.
Responder Con Cita
  #2 (permalink)  
Antiguo 19-09-2007, 18:13:43
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.184
acalanto ha deshabilitado la reputación
Predeterminado

Parece ser que mi respuesta del otro día no te ha servido...por ello abres un nuevo post con la misma pregunta y practicamente el mismo código.

Como la pregunta la realizas en un nuevo post y por consiguiente, el resto de usuarios no tiene porqué conocer el origen anterior de la pregunta, me obligas a poner en antecedentes y refrescar la memoria.

En mi respuesta anterior te aconsejaba controlar el numero de bytes recibidos y esto lo debe realizar en el evento DataArrival del cliente. Como esta parte del código no la adjuntas, y ni tan siquiera cabe suponer que los datos recibidos los trates de recibir en este evento, he de reiterarte a que el conteo de bytes lo hagas en el lugar adecuado (DATAARRIVAL) y en todo caso, que intentes aclarar como lo estás haciendo en tu código.

Si las preguntas son tan confusas como la que tu haces, no puedes pretender recibir respuestas más allá de las conjeturas que otros usuarios puedan hacer, pero en todo caso (norma del foro) no insertes un nuevo post con la continuación de una consulta ya realizada.


No sé si ahora entiendes lo que trato de transmitirte.


PD. Por si no lo recuerdas, y para que sirva de orientación a otros usuarios que lean tu pregunta, este es mi anterior mensaje.


Cita:
Bueno, tú código no aclara demasiado como recibe los datos el cliente...el servidor parece ser que los envía todos en una única trama.

En principio, implementar una barra de progreso, es tan sencillo como tener el control sobre una determinada magnitud porcentual.

En tu caso tienes que conocer el total de bytes del fichero y la cantidad recibida por el socket. La fórmula es sencilla:

me.socketFileBar = iif((100*(recibidos/total))>me.socketFileBar.Max, me.socketFileBar.Max, 100*(recibidos/total)))

Fíjate bien que asigno el valor mediante un condicional inline, así procuro evitar que por redondeos incontrolados, el valor supere el máximo admitido por el control progressbar.


Lógicamente, debes insertar en el formulario un progressbarr, y modificar los nombres que yo he puesto por los que tú consideres convenientes. El nu´mero de bytes transmitidos por el socket supongo que ya lo debes tener bajo control, ya que esa parte de código no la adjuntas.


Espero que te resulte útil.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 19-09-2007, 18:24:05
Junior Member
Site Admin
 
Registrado: sep 2007
Posts: 6
el_trocha Valoración +2
Predeterminado

Acalanto no te entiendo la respuesta. la verdad yo lo que hago es abrir el fichero en el server y mandarselos al cliente.

Abro el archivo en forma binaria y con la llamada a get #2, , datos .... le envio la informacion al cliente que lo recibe en el dataarrival con la llamada a put #2, , datos

De ese modo hago llegar los datos del servidor al cliente.

Pero no tengo ni idea de como controlar la cantidad de bytes que se pueden enviar.

De que manera puedo mandar una cantidad de datos concreto.

Ademas si ya tengo el valor minimo de la probress bar y el valor maximo con la llamada que hago en el servidor para calcular el valor del fichero y enviarsela al cliente atraves del dataariival como indico mas arriba, y le asigno los valores al value del progres bar como: sizefilerecibido = sizefilerecibido + bytesTotal

Que mas me hace falta saber para que funcione?
Responder Con Cita
  #4 (permalink)  
Antiguo 19-09-2007, 20:50:57
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.184
acalanto ha deshabilitado la reputación
Predeterminado

Pues si no entiendes mi respuesta será -como ya te he dicho- porque yo no acabo de entender tu pregunta; mucho más cuando ahora me comentas que recibes en el evento DataArrival y controlas los bytes recibidos.

No sé si es que desconoces que el control ProgressBar siempre funciona por valor porcentual (entre 0.0001 y 100.00), pero si conoces el número total de bytes que debería recibir -si todo funciona de la forma esperada- y conoces la cantidad recibida, sólo te queda aplicar la fórmula que te indico en el primer post, que calcula el valor en porcentaje de lo recibido en función de lo esperado.

En realidad -no sé si esto te puede aclarar algo- el protocolo TCP no te permite controlar el volumen de información enviado, pero si el número de datos que ha conseguido enviar (En el server y mediante el objeto WinSock). Desconozco si el propio Winsock establecerá los controles necesarios para gestionar cualquier volumen de datos; en tu caso trataría de estblecer una gestion tipo Chunk para enviar el fichero en diferentes paquetes, controlando cuando el cliente ha recibido , procesado y solicita el envío de mas información, dicho de otra manera..el cliente-servidor tienes que establecer un protocolo de transmisión para asegurar que los datos llegan de forma correcta. Envíame...teEnvío...esperaqueestoyprocesando....en víamedenuevo....yateheenviadotodo....cerramoslacon exión...valelacierro...etcétera.

Permiteme que te manifieste una opinión personalaún a riesgo de parecerte descortés (nada más lejos de mi intención). Si lo que pretendes es copiar fichero de un equipo a otro dentro de un mismo entrono de red local...simplemente cópialo con las propias herramientas del sistema operativo; si lo que necesitas es descargar ficheros desde un equipo remoto, instala un servidor FTP y ejecuta las acciones mediante un control INET o el propio Winsock respetando las reglas del protocolo FTP, que para eso está ya inventado.

No sé si ahora me explico con mayor claridad. Si no es así trataré de afinar la próxima respuesta, pero mis respuestas dan por entendido que tienes un buen control de comunicaciones remotas y asíncronas, de lo contrario házmelo saber porque sino podemos estar 'mareando la perdíz'.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Ayuda por favor soy nuevo necesito un manual básico EduardoGS Lenguaje SQL 4 11-06-2008 00:11:56
por favor, necesito ayuda sobre cobol petermaniaco RM/COBOL & Relativity 2 21-11-2007 18:29:06
Necesito ayuda por favor kacto Visual Basic 6.00 2 30-07-2007 19:06:39
Por Favor necesito Ayuda con ADO therock01 Visual Basic.NET 2003 & 2005 3 24-11-2006 14:14:46
Por favor !!! necesito ayuda con un dbgrid juanpasolcas Visual Basic 6.00 2 12-10-2006 19:12:54


La franja horaria es GMT. Ahora son las 07:28:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right