Título: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: Proxy Lainux en 8 Junio 2008, 11:34 am hola
haber si me pueden ayudar.. lo que pasa es que estaba haciendo que mi programa de transferencia de archivos funcionara... lei el manual de eon sobre eso... solo que yo utilice el winsock.ocx y la api csocketmaster... cuando lei el manual logre entender lo que hizo eon, y lo hice como pude con el cliente y funciono bien, pero cuando mando al server algun archivo solo logro enviar un archivo de no mas de 2mb... sera acaso por la api que sucede eso?, ya que eso apenas lo intentare, utilizare el ocx en el server para ver si me hace lo mismo, pero por ahorita intente hacer varias cosas e incluso quise hacerlo exactamente como lo hizo E0N, pero no lo logro... alguien sabe si hay problemas con la api csocketmaster para transferencia de archivos?... o que puede estar pasando que solo logro enviar archivos pequeños al server...? espero me puedan ayudar.. gracias ;D Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: Xerok1! en 8 Junio 2008, 15:21 pm Pues según parece tienes que partir el archivo en partes y enviarlas, pero así sin más información no te puedo decir seguro..Te sale algún tipo de error o algo?
Un saludo :-\ Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: ~~ en 8 Junio 2008, 16:50 pm Hola Proxy Lainux
No creo que sea problema de usar el csocketmaster o no usarlo. Por lo que dices (qunque sin ver código dificil juzgar) no debes estar enviando bien los archivos. Mirate el código de un File Manager que puse por el foro (en un post con chincheta tienes el enlace, o si no busca en google [Source] File Manager completo by E0N" o algo así :P) y verás como tienes que envarlo. La idea es la siguiente, imaginemos que desde el cliente (lo que manejas en tu Pc) quieres que el server (lo que está en el Pc remoto, por aclara xD) quieres descargarte el archivo C:\hola.txt de 2500 bytes de tamaño y guardarlo en C:\recibido.txt (en tu Pc), pues la cosa sería así:
Esa es la idea, en el File Manager que te mencionaba antes tienes el código. Salu2 E0N Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: yovaninu en 8 Junio 2008, 17:33 pm
Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: ~~ en 8 Junio 2008, 17:38 pm Pidiendo el archivo desde el cliente y poniendo el interruptor en true directamente por ejemplo y parar de leer cuando se envie la cadena "FIN ARCHIVO" por ejemplo, es una opción, se puede hacer de muchas formas esto, hay más metodos tb explicados por el foro ;)
Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: Proxy Lainux en 9 Junio 2008, 02:11 am hola
gracias por las respuestas.. pero miren, e intentado descargar archivos desde el server hacia el cliente y de mas de 20 mb y todo va perfecto... pero cuando kise hacer que el cliente envie un archivo al server como les mencione anteriormente y llego a enviar algo de mas de 2 mb, ya no se guarda, la unica diferencia es que en el server ya no use cd.ShowSave... el codigo que hice esta basado en el ejemplo de Filemanager by E0N... y me he dado cuenta de que el cliente envia mas bits del archivo original... asi que intente hacer lo mismo que hizo E0N para saber porke no estaba funcionando, en cierta forma copie o transcribi el codigo del ejemplo y el cliente sigue enviando bits de mas... esto es lo que hago... Código: es es de un form6 del cliente Form1.cd.DialogTitle = "Archivo a enviar" Form1.cd.ShowOpen Label3.Caption = Form1.cd.FileName trem = Split(Form1.ListView1.SelectedItem.key, "|") Form1.ws(trem(0)).SendData "envarc|" & FileLen(Form1.cd.FileName) & "|" & Text1.Text & Form1.cd.FileTitle servidor case envarc arev = todo(1)este guarda filelen arevs = todo(2) este guarda la direccion de donde quiero que se guarde y el nombre del archivo dat = "" ws.SendData "now" form1 cliente Case "now" Open Form6.Label3.Caption For Binary As #1 nos = Space(LOF(1)) Get #1, , nos Close #1 spb = Split(ListView1.SelectedItem.key, "|") ws(spb(0)).SendData nos Form6.Label3.Caption = "" tambien intente hacer esto pero tampoco funciono for o = 1 to len(nos) cadena = mid(nos,o,10) o=o+9 spb = Split(ListView1.SelectedItem.key, "|") ws(spb(0)).SendData cadena Sleep 1 next o servidor If arev <> "0" Then tdata = tdata + dat If Len(tdata) = arev Then Open arevs For Binary As #1 Put #1, , tdata Close #1 arev = 0 tdata = "" arevs = "" End If End If si se dan cuenta acabe haciendo casi un copy paste del codigo pero no me funciono Título: Re: solo logro hacer transferencia de archivos de menos de 2mb, que puedo hacer? Publicado por: LeandroA en 9 Junio 2008, 03:00 am hola te pongo un ejemplo de como enviar un archivo en trozos, claro que tenes que poner la parte del tamaño y bueno vos sabes.
Código: Dim Pos As Long Dim Segment As Long Dim SegmentCount As Long Dim LenRest As Long Dim SendFileComplete As Boolean Dim FreeF As Integer Const Buffer = 4096 Dim SendingFile As Boolean Dim FileData() As Byte Private Sub SendFile(ByVal FileName As String) Dim LenFile As Long Dim TotInteger As Long LenFile = FileLen(FileName) SegmentCount = Val(LenFile / Buffer) TotInteger = SegmentCount * Buffer LenRest = LenFile - TotInteger Segment = 0 Pos = 1 ReDim FileData(Buffer - 1) SendingFile = True SendFileComplete = False Open FileName For Binary Access Read As #FreeF call SendNextSegment End Sub Private Sub objWinSock_SendComplete() If SendingFile Then SendNextSegment End Sub Private Function SendNextSegment() If objWinSock.State = 7 Then If SendFileComplete Then SendingFile = False Call CloseConection 'funcion que cierra la conexion o termino el envio del archivo Exit Function End If If Segment = SegmentCount Then If LenRest > 0 Then ReDim FileData(LenRest - 1) Get FreeF, Pos, FileData Close #FreeF SendFileComplete = True If objWinSock.State = 7 Then objWinSock.SendData FileData End If Else Get #FreeF, Pos, FileData If objWinSock.State = 7 Then objWinSock.SendData FileData Pos = Pos + Buffer End If Segment = Segment + 1 End If End Function |