Autor
|
Tema: Mandar archivo exe por socket (Leído 4,566 veces)
|
grester43hck
Desconectado
Mensajes: 57
|
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 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 .
|
|
|
En línea
|
|
|
|
Elemental Code
Desconectado
Mensajes: 622
Im beyond the system
|
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
|
|
|
En línea
|
I CODE FOR $$$ Programo por $$$ Hago tareas, trabajos para la facultad, lo que sea en VB6.0 Mis programas
|
|
|
grester43hck
Desconectado
Mensajes: 57
|
GRacias por responder 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... 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
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
GRacias por responder 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... 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 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!¡.
|
|
« Última modificación: 20 Julio 2010, 01:08 am por BlackZeroX »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
grester43hck
Desconectado
Mensajes: 57
|
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 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.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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!¡.
|
|
« Última modificación: 20 Julio 2010, 10:34 am por BlackZeroX »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
grester43hck
Desconectado
Mensajes: 57
|
Ok, antes de nada gracias de nuevo , 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.
|
|
|
En línea
|
|
|
|
ABDERRAMAH
Desconectado
Mensajes: 431
en ocasiones uso goto ¬¬
|
quita el on error y ejecuta en modo debug, el programa se te parará y visual studio te señalará el error. On Error GoTo error_Sub eso fuera y modo debug... a ver si te enteras de algo.
|
|
|
En línea
|
|
|
|
grester43hck
Desconectado
Mensajes: 57
|
El caso es que error no da, es directamente que no copia el archivo...
|
|
|
En línea
|
|
|
|
ABDERRAMAH
Desconectado
Mensajes: 431
en ocasiones uso goto ¬¬
|
Buff, ahí ya me rompes...
|
|
|
En línea
|
|
|
|
|
|