Mandar archivo exe por socket

Iniciado por grester43hck, 19 Julio 2010, 18:07 PM

0 Miembros y 2 Visitantes están viendo este tema.

grester43hck

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 ;).

Elemental Code

Puede que yo sea un salame sin remedio perooo.

Obtener codigo:
Código (vb) [Seleccionar]

    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:
Código (vb) [Seleccionar]
    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

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

grester43hck

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

BlackZeroX

#3
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!¡.
The Dark Shadow is my passion.

grester43hck

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.

BlackZeroX

#5
solo pasa la variable del array por el senddata!¡

Ejemplo:

Código (vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.

grester43hck

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.

ABDERRAMAH

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.

grester43hck

El caso es que error no da, es directamente que no copia el archivo...

ABDERRAMAH