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
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 :-\
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í:
- El cliente envia la orden de descargar el archivo, por ejemplo envia "descargar|C:\hola.txt"
- El servidor lee dicho archivo y le envia al cliente esto por ejemplo: "leidoOK|2500" siendo 2500 su tamaño
- El cliente almacena el valor 2500 y activa un "interruptor", es decir, al inicio del DataArrival pones un If interruptor = true... y dentro haces que todos los datos que te vayan llegando los meta en el archivo recibido, es decir, en C:\recibido.txt. A continuación manda un comando para que el server empiece a enviar el archivo, por ejemplo envia "mandar_archivo"
- El servidor manda el archivo.
- El cliente va metiendo todo lo que reciba en C:\recibido.txt hasta que el tamaño de C:\recibido.txt sea igual al tamaño que a recibido anteriormente, es decir 2500 bytes. Cuando lo tenga todo pone en false el interruptor y listo, ya puedes hacer que el "troyano" o lo que sea reciba sus órdenes con normalidad.
Esa es la idea, en el File Manager que te mencionaba antes tienes el código.
Salu2 E0N
Cita de: E0N en 8 Junio 2008, 16:50 PM
- El servidor lee dicho archivo y le envia al cliente esto por ejemplo: "leidoOK|2500" siendo 2500 su tamaño
- El cliente almacena el valor 2500 y activa un "interruptor", es decir...
- El cliente va metiendo todo lo que reciba en C:\recibido.txt hasta que el tamaño de C:\recibido.txt sea igual al tamaño que a recibido anteriormente, es decir 2500 bytes.
Habria alguna forma de evitar que tenga que hacerse primero eso?, es decir no tener que hacer el "ida y vuelta" antes de empezar la transferencia del archivo.
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 ;)
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...
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
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.
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