Hola! mi problema es al mandar un archivo exe por socket, lo abro como binario y lo envio, supongo que ese es el problema, que no hay que leerlo como binario :P si me dicen como se lo agradezco. aqui les dejo la parte del codigo donde lo leo/mando y deonde lo recojo/guardo:
Dim Buf As String * 1024
Dim Todo As String
Open (ruta de mi archivo.exe) For Binary As #1
Do While Not EOF(1)
DoEvents
Get #1, , Buf
Todo = Todo & Buf
Loop
Close
envio.SendData Todo
Exit Sub
Dim Texto As String
envio.GetData Texto
Archivo = Archivo & Texto
If Len(Archivo) >= Largo Then
Open (mi ruta de guardado.exe) For Binary As #1
Put #1, , Archivo
Largo = 0
Archivo = ""
Close #1
End If
Gracias ;).
Puede que yo sea un salame sin remedio perooo.
Obtener codigo:
dim codigo as string 'el codigo binario
dim exefile as string 'la ruta de tu exe
Open Exefile For Binary As #1
codigo = Space(LOF(1))
Get #1, , codigo
Close #1
Para escribir Codigo:
dim exefile as string 'la ruta adonde guardas el nuevo exe
dim codigorecibido as string 'el codigo binario que recibiste con el winsock
Open exefile For Binary As #1
Put #1, , CodigoRecibido
Close #1
Ahora adapta eso para que funcione con tu codigo
GRacias por responder :D pero sigo con el problema, al pasar el archivo, se queda dañado o algo parecido y al ejecutarlo sale la tipica cmd que intenta ejecutar algo pero que no ejecuta nada :-\ La verdad es que en transferencia de archivos no tengo mucha esperiencia que se diga... :P pero no sera que no se puede leer como un archivo binario? al ser exe no se si eso influye... De todas formas gracias por el code, es mas pequeño que el mio y esta mas claro :P
Cita de: grester43hck en 19 Julio 2010, 21:02 PM
GRacias por responder :D pero sigo con el problema, al pasar el archivo, se queda dañado o algo parecido y al ejecutarlo sale la tipica cmd que intenta ejecutar algo pero que no ejecuta nada :-\ La verdad es que en transferencia de archivos no tengo mucha esperiencia que se diga... :P pero no sera que no se puede leer como un archivo binario? al ser exe no se si eso influye... De todas formas gracias por el code, es mas pequeño que el mio y esta mas claro :P
Intenta usar en lugar de String un Array Byte(), también usa un protocolo de transferencia, habitualmente de forma local es muy rápida la transferencia por lo cual se corta el archivo, pero son en casos Raros... intenta de igual manera no estar abriendo y cerrando tanto el archivo, déjalo abierto y cuando termine de resivir el archivo lo cierras !¡.
P.D.: Un carácter en un String = 2 bytes 1 carácter en un ArrayBye = 1 Byte xP (Lógica), ya qué el array es consecutivo y sin separador!¡, en el string es todo lo contrario!¡..
Sangriento Infierno Lunar!¡.
Bueno, vamos avanzando ^^ . Ya al menos haciendolo sin envio por socket se copia bien, lo hize con el metodo de array, ahora mi pregunta es la siguiente: ¿Como envio ese array por el socket? por que lo he intentado con un socket.senddata array
pero no llegan los datos... ¿hago un blucle que envie todos los datos byte por byte y luego los recojo uno por uno con mensajes de confirmacion de llegada etc?
Pero supongo que abra alguna forma mas facil y rapida ¿no?
Gracias.
solo pasa la variable del array por el senddata!¡
Ejemplo:
Dim ff As Integer
Dim vData() As Byte
Dim file As String
file="c:\aaa.exe"
If Dir(file, vbArchive) <> "" Then
ff = FreeFile
Open file For Binary Access Read As ff
ReDim vData(LOF(ff) - 1) ' // el 0 es contable por ello se resta -1
Get ff, , vData
Close ff
S_Main_Out(index).SendData vData
Else
' // Log Errores
End If
En el servidor te recomiendo de igual manera recoger los datos con un array tipo byte solo pasa la variable en el getdata y grabalo en el archivo eso seria todo!¡.
Sangriento Infienro Lunar!¡.
Ok, antes de nada gracias de nuevo :D , como ya no se que hago mal :-[, posteo el codigo aqui, y me decis que puede ser... Son varias partes:
La primera, envia el tamaño del archivo para luego redimensionar el array alli:
Private Sub Enviar_Click()
On Error GoTo error_Sub
Dim servidor2 As String
servidor2 = (ruta de mi exe)
Dim fLen As Long
fLen = FileLen(servidor2)
MsgBox (Str(fLen))
envio.SendData (Str(fLen))
Close
Form3.all.Text = Form3.all.Text & "Tamaño enviado... Esperando respuesta para envio..."
Form4.Hide
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub
La segunda parte, que envia el archivo:
Private Sub envio_DataArrival(ByVal bytesTotal As Long)
Dim vale As String
envio.GetData vale, vbString
If vale = "OK" Then
On Error GoTo error_Sub
Dim Data() As Byte
Dim archivo As String
archivo = (ruta de mi exe)
Dim fLen As Long
Open archivo For Binary Lock Read As 1
fLen = FileLen(archivo)
ReDim Data(fLen) As Byte
Get #1, , Data
envio.SendData Data
Close 1
Form3.all.Text = Form3.all.Text & "Enviado... Esperando confirmacion de llegada..."
Form4.Hide
End If
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub
Y por ultimo el codigo de la otra aplicacion que recoje todo lo anterior:
Private Sub envio_DataArrival(ByVal bytesTotal As Long)
On Error GoTo error_Sub
Dim Data() As Byte
Dim recibido As String
Dim fLen As Long
Dim recib As Boolean
Servidorrecibido = ""
If recib = False Then
envio.GetData recibido
fLen = Val(recibido)
envio.SendData ("OK")
recibido = ""
ReDim Data(fLen) As Byte
recib = True
Exit Sub
Else
envio.GetData Data
recib = False
Open (ruta de guardado de mi exe) For Binary Access Write As 2
Put #2, , Data
Close 2
Exit Sub
End If
error_Sub:
chat.SendData ("##Error al recibir el exe :(##" & vbCrLf)
End Sub
Eso es todo, y no funciona!!!
Gracias.
quita el on error y ejecuta en modo debug, el programa se te parará y visual studio te señalará el error.
CitarOn Error GoTo error_Sub
eso fuera y modo debug... a ver si te enteras de algo.
El caso es que error no da, es directamente que no copia el archivo...
Buff, ahí ya me rompes...
ok simplifique bastante el codigo y ahora si que lo envia :D peeeero como no.. no funciona... sige sin funcionar el exe que envio... es mas, prove a enviar el mismo exe pero a guardarlo en txt en vez de en exe y en vez de algo ilegible, eran todo espacios en blanco o.O ¿alguna idea de por que solo se envian o recojen espacios en blanco en vez de lo que se deve?
Creo que debes de declarar la varible en el form como Private ó en un modulo Bas como publica para que se pueda recoger!!
ReDim Data(fLen) ' solo al principio, cuando lo lees.
Private data() as byte
ó
Public data() as byte
De esta forma permanecerá la información disponible y podras guardarlo en otro sitio.
Espero haberte servido de ayuda.
Un saludo
Antes que nada Tabula Tu Código es ILEGIBLE, no se puede detectar ningún error así, es como estar leyendo Chino!¡.
Cita de: BlackZeroX en 20 Julio 2010, 10:27 AM
solo pasa la variable del array por el senddata!¡
Ejemplo:
Dim vData() As Byte
Dim ff As Integer
Const OuputFile As String = "e:\aaaa.jpg"
Winsock1.GetData vData
ff = FreeFile
Open OuputFile For Binary As ff
Put ff, LOF(ff) + 1, vData
Close ff
En el servidor te recomiendo de igual manera recoger los datos con un array tipo byte solo pasa la variable en el getdata y grábalo en el archivo eso seria todo!¡.
Sangriento Infierno Lunar!¡.
en un evento DataArrival
Dim vData() As Byte
Dim ff As Integer
Const OuputFile As String = "e:\aaaa.jpg"
Winsock1.GetData vData
ff = FreeFile
Open OuputFile For Binary As ff
Put ff, LOF(ff) + 1, vData
Close ff
Es lo ultimo qué pongo aquí...
Dulces Lunas!¡.
Bueno pues al final si salió :D ya funciona a la perfección!! muchas gracias a todos. Si quereis posteo el codigo final, pero es muy parecido al de BlackZeroX.