Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Jareth en 1 Abril 2007, 00:41 am



Título: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 00:41 am
Hola,veran este codigo no me va para hacer lo que quiero,enviar una imagen recibirla,y cargarla en un picture.
Servidor:
Código:
dim ar as string
Open "c:\capture.jpg" For Binary As #1
ar = Space(LOF(1))
Get #1, , ar
Close #1
WS.SendData "paco|" & ar

Cliente:
Código:
Case "paco"
Dim ar As String
Open "c:\captura1.jpg" For Binary Access Write As #1
Put #1, , sData(12)
Close #1
Form4.Picture1.Picture = LoadPicture("c:\capture.jpg")

Aqui debe estar el problema,he probado en vez acces write solo binary y la verdad no se que puede pasar,supongo que todo el code esta bien,lo he hecho yo pero deberia funcionar y no me va.
De antemano muchas gracias.
Saludos.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 1 Abril 2007, 01:57 am
el problema es q no puedes enviar archivos muy grandes con winsock... debes dividirlos en paquetes y enviarlos de a uno y para recibirlso debes juntarlos... no se mucho del tema pero seguro alguien te explica mas... o si buscas como encuentras


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 13:05 pm
Es una foto peor probaré a partirlo y juntarlo.


Título: Re: Problema enviar archivo
Publicado por: yovaninu en 1 Abril 2007, 16:55 pm
para enviar un archivo de cualquier tamaño a traves del winsock, no tienes que dividirlo tu, eso lo hace el protocolo tCP/ip, lo que tu tienes que hacer es recibirlo paquete a paquete.

si el cliente envia, pues es en el servidor donde tendras que juntar los paquetes y viceversa.

ejemplo de enviar un archivo desde el cliente al servidor:

cliente:
Código:
 Open "c:\unarchivo.jpg" For Binary As #1
  filedata = Input(LOF(1), 1) 'en esta variable string cargo todo el archivo
 Close #1

 ruta="d:\" 'en esta variable esta la ruta en donde se copiara en el servidor el archivo que envio

 filesize = Len(filedata) 'aqui calculo el tamaño de lo que estoy enviando (long) en bytes

Winsock1.SendData "enviar" & "|" & filesize & "|" & ruta 'envio prmeramente una clave "enviar" luego el tamaño "filesize" y la ruta  "ruta"... (aun no estoy enviando el archivo en si)

ahora te vas al servidor:

Código:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
WS.GetData datosS

If Left(datosS, 7) = "archivo" Then
    dato = Split(datosSS, "|") 'una variable dato (dim dato() as string) se encarga de dividir clave, tamaño y ruta
    filesize = dato(1) 'aqui tengo el tamaño enviado por el cliente
    Path = dato(2) 'aqui la ruta
    viene_archivo = True 'prendo un interruptor
    Winsock.SendData "enviar" 'ahora si le pido al cliente que envie el archivo en si
    datosSS = ""
End If

pasamos al cliente:
Código:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)

Winsock.GetData DAToS

If DAToS= "enviar" Then

 Winsock.SendData filedata 'aqui es donde realmente envia... aqui es donde el protocolo se encargara de dividir los paquetes... en el servidor habra que juntarlos uno a uno
End If

servidor:

Código:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
WS.GetData datoS

If viene_archivo = True Then
   'declarar arriba: Dim Datos2 As String
   datos2 = datos2 & datoS 'lo que te decia: juntamos parte por parte el archivo que el cliente esta enviando

    If Len(datos2) = filesize Then 'si termina
      Open Path & "nuevoArchivo.jpg" For Binary As #4 'asumo que envias un JPG, sino vas a tener que usar un CommonDialog en el cliente si quieres usar el mismo nombre de archivo que envias del cliente
       Put #4, 1, datos2
      Close #4
      viene_archivo = False 'apagas el interruptor
      datos2 = "" 'vaceas el buffer
      MsgBox "Archivo Recibido con Éxito." 'vuala, aqui termina todo el proceso y depues de esto supongo que tendras que cargar la imagen recibida a un picture, eso ya es tu trabajo.
    End If
End If

si deseas mas info, postea


Título: Re: Problema enviar archivo
Publicado por: ~~ en 1 Abril 2007, 17:02 pm
Mira aki (http://www.kizar.net/foro/index.php?topic=620.msg3816#msg3816) tienes otro ejemplo, q a mi me parece mas simple xD sera por q siempre lo uso  ;D ;D


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 17:57 pm
He probado los 2 codes y no me va,yo lo que quiero es enviar la imagen que capturo,un screen capture pero lo tengo en un timer claro,y me llegan algunos bytes de la imagen no se volveré a probar.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 1 Abril 2007, 18:05 pm
Pues deberia funcionarte.. Has compilado el mio tal y como te lo e puesto?? (cambiando lo unic olas rutas xD)

A ver el funcionamiento es el siguiente:

El cliente hace la petiion de un archivo.
El server enbia al cliente el tamaño del archivo.
El cliente pone en marcha un interruptor. A partir de ese momento y hasta q el tamaño de datos recibidos sea igual al tamaño q nos enviaron antes alamcenamos.
Una vez tengamos todo lo guardamos en un archivo

Ese es el funcionamiento. Es simple, deberia funcionarte..


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 18:10 pm
Pongo el code(yo quiero hacer un screen capture):
Servidor:
Código:
Private Sub Timer1_Timer()
Dim foto As New cJpeg
Dim ar As String
Dim filesize As String
foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 50   ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso
foto.SampleScreen
foto.SaveFile ("c:\" & "\capture12" & ".jpg")
Open "c:\capture.jpg" For Binary As #1
ar = Input(LOF(1), 1)
filesize = Len(ar)
Close #1
WS.SendData "paco|" & filesize & ar

End Sub

Cliente:
Código:
Case "paco"

Dim ar As String
Dim filesize As String

Dim datos2 As String
filesize = sData(1)
datos2 = datos2 & sData(2)
enviar "yeah|"

 If Len(datos2) = filesize Then
Open "c:\captura1.jpg" For Binary As #1
Put #1, , datos2
Close #1

datos2 = ""
Form4.Picture1.Picture = LoadPicture("c:\captura1.jpg")
End If

Y nada,0 bytes,antes alemnos me hizo 663 bytes pero ahora 0 y es cierto porque es el valor qeu tiene sdata(1).
No sé que hago mal.
Espero me puedan ayudar.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 1 Abril 2007, 18:13 pm
yovaninu muy buena explicacion! al fin eh entendido casi todo!

lo q no entiendo es q significa esta linea

Citar
If Left(datosS, 7) = "archivo" Then

para q es el left(datoS,7)???

Citar
viene_archivo = True 'prendo un interruptor

y como se hace el interruptor? asi nomas? eso es todo? y para q sirve...


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 18:33 pm
lo del left es: empezando desde la derecha,contamos 7 caracteres
es decir left(datosS,7) seria de izquierda a derecha solo miramos los 7 primeros,si es igual a "archivo" pues hacemos la accion.
El interruptor es un boolean que lo activa y lo desactiva para hacer acciones o saber el estado,lo activa al principio y luego comprueba el estado de  este para realizar una accion.
Saludos

pd:la verdad es que la explicacion si esta muy bien pero aun sigo sin que funcione...


Título: Re: Problema enviar archivo
Publicado por: ~~ en 1 Abril 2007, 19:32 pm
A ver cambia esto:
Citar
Open "c:\capture.jpg" For Binary As #1
ar = Input(LOF(1), 1)
filesize = Len(ar)
Close #1

Por space(lof(1))  a ver si asi te funciona ademas en ningun momento haces un get para obtener los datos... y en la linea:

Código:
filesize = Len(ar)

pon FileLen("c:\capture.jpg") en vez de len ;)

Otra cosa, se te guarda bien la imagen en C:?? por q mira:
Código:
foto.SaveFile ("c:\" & "\capture12" & ".jpg")

No ves q hay dos \. Lo intentas guardar en C:\\capture12.jpg..

Aparte sigues aciendolo mal. Fijate:

SERVER:
Código:
WS.SendData "paco|" & filesize & ar

CLIENTE:
Código:
Case "paco"

No ves q paco solo se envia una vez mientras q los otros datos siguen llegando? asi no see acumulan, tienes q poner un interruptor como yo te e dicho (FIJATE EN EL CODE Q TE E PASADO!!!!), seria asi:



SERVER:
Código:
Private Sub command1_click() ' Te lo pongo en un boton y luego ya lo cambias
Dim foto As New cJpeg
Dim ar As String
Dim filesize As String
foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 50   ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso
foto.SampleScreen
foto.SaveFile ("c:\" & "capture" & ".jpg")

ws.SendData "Tam:" & FileLen("C:\capture.jpg") 'Enviamos el tamaño de la foto q acabamos de sacar

End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim Send As String
ws.GetData data

If Left(data, 8) = "SendFile" Then
Open "C:\Prueba.txt" For Binary As #1
Send = Space(LOF(1))
Get #1, , Send
Close #1

ws.SendData Send
End If

End Sub




CLIENTE
Código:
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data

If Envio = True Then
DataFile = DataFile & data
ProgressBar1.Value = Len(DataFile)
If Len(DataFile) = LenFile Then
Open "C:\Prueba2.txt" For Binary As #1
Put #1, , DataFile
Close #1
DataFile = ""
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False
ProgressBar1.Value = 0
End If
End If

If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
ProgressBar1.Max = LenFile
Envio = True
ws.SendData "SendFile"
End If


Asi te tiene q funcionar por mis coj***
1S4ludo


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 19:39 pm
ajajajaj me rio de las capulladas que he hecho,xD.Gracias E0N pruebo y me tiene que ir por huevos sino me matas,xD.
Enga gracias y saludos.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 1 Abril 2007, 20:03 pm
gracias por la respuesta Jareth
entonces segun entiendo podriamos reemplazar el codigo

Citar
left(datosS,7)

por un separador | y comprobrar si la primera parte es archivo... me parece q para mi programa iria mejor de esa forma...

es lo mismo no? segun entiendo


Título: Re: Problema enviar archivo
Publicado por: ~~ en 1 Abril 2007, 20:08 pm
Si, es mucho mejor

Puedes poner cualkier caracter q actue como separador y luego usar un split para partirlo ;)


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 1 Abril 2007, 20:16 pm
ok muchas gracias EON... por ahora la funcion q le puse es la tuya se la copie.. pero no se me es mas dificil de entender.. ahora con estos datos voy a hacer la mia ;)

gracias a todos


Título: Re: Problema enviar archivo
Publicado por: Jareth en 1 Abril 2007, 20:26 pm
Yo solo decir que me va mal,la imagen me llega solo una parte de arriba,solo un cacho,no se en que fallo si el code es el de E0N.
Por cierto E0N,yo lo hacia con case osea enviaba "esto|" y hacia
case "esto" pero tu no lo haces asi,no se seguiré probando,peor solo me llega un cacho,que puede ser?


Título: Re: Problema enviar archivo
Publicado por: ~~ en 1 Abril 2007, 23:40 pm
Seguramente q me haya comido algun trozo de code por q lo e hecho aki directamente, sin el VB delante. Vamos a ver, prueva con esto:

Server:
Código:
Private Sub Form_Load()
ws.Close
ws.Connect "127.0.0.1", 2848
End Sub

Private Sub ws_Connect()
Dim foto As New cJpeg
Dim ar As String
Dim filesize As String
foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 50   ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso
foto.SampleScreen
foto.SaveFile ("C:\capture.jpg")

ws.SendData "Tam:" & FileLen("C:\capture.jpg")
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim Send As String
ws.GetData data

If Left(data, 8) = "SendFile" Then
Open "C:\capture.jpg" For Binary As #1
Send = Space(LOF(1))
Get #1, , Send
Close #1

ws.SendData Send
End If

End Sub



Cliete:
Código:
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub Form_Load()
ws.LocalPort = 2848
ws.Listen
Envio = False
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data

If Envio = True Then
DataFile = DataFile & data
If Len(DataFile) = LenFile Then
Open "C:\capture2.jpg" For Binary As #1
Put #1, , DataFile
Close #1
DataFile = ""
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False

'Una vez lo tenemos lo mostramos
Form4.Picture1.Picture = LoadPicture("C:\capture2.jpg")
End If
End If

If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
Envio = True
ws.SendData "SendFile"
End If

Ya esta. Compilas eso (solo añadiendo un form4 con un picture box unos winsocks y los modulos cjeg) y deberia funcionarte bien.

Lo de usar left o | da igual. Es mejor usar el split la verdad asi q en tu caso el server deberia enviar
ws.SendData "Tam:|" & FileLen("C:\capture.jpg")
en vez de
ws.SendData "Tam:" & FileLen("C:\capture.jpg")

Y el cliente comprovar si es Tam: solamente, seria:
case"Tam:":
en vez de
If Left(data, 4) = "Tam:" Then

Pero vamos eso ya es q  tu lo adaptes. Si sigue sin funcionarte dimelo y te lo subo bien, por q esto  lo estoy haciendo sin provar ;)

1S4ludo


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 00:29 am
Hola muchas gracias E0N por tu ayuda,pero solo me llega una parte de la imagen,un poco de la de arriba,son 139 kb y me llegan 1,36 kb.
No sé si soy yo pero estos code solo me hacen llegar eso.
Y eso que tu code lo he probado aparte y funciona 100%,el problema esta en algo mio....aqui va el code(igual es porque hay algo en un timer):

 SERVIDOR
Código:
Private Sub Timer1_Timer()
Dim foto As New cJpeg

Dim filesize As String
foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 50   ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso
foto.SampleScreen
foto.SaveFile ("c:\" & "capture" & ".jpg")

WS.SendData "tam:|" & FileLen("c:\capture.jpg")

Case "send"
Dim ya As String
Dim send As String
ya = FileLen("c:\capture.jpg")
Open "c:\capture.jpg" For Binary As #1
send = Space(LOF(1))
Get #1, , send
Close #1
WS.SendData "yas|" & send & "|" & ya
End Select

End Sub

 CLIENTE
Código:
Case "tam:"
Dim lenfile As Long
lenfile = Mid(sData(1), 5)
enviar "send|"
Dim ya As String
ya = sData(2)
Case "yas"
Dim datos2 As String
datos2 = datos2 & sData(1)
If Len(datos2) = ya Then
Open "c:\captura.jpg" For Binary As #1
Put #1, , datos2
Close #1
datos2 = ""
MsgBox "llegaron perfectamente"
End If


Bueno creo que es todo,a ver si hay algo que hago mal,o si me recomendais cambiar....
Muchas gracias a todos,que sé qeu soy mu pesao... :P


Título: Re: Problema enviar archivo
Publicado por: ~~ en 2 Abril 2007, 00:45 am
El mio aparte si te fucionaba no? por q ya me estaba preocupando xDD

Kita el timer. Haz q nada mas recibir una imagen haga peticion de la siguiente.
Tendrias q ponerlo en el cliente justo despues de el msgbox q dice "llegaron perfectamente".

1S4ludo


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 00:59 am
Tu code funciona 100%,pero he quitado el timer y no me va,igual solo un trozo.
No se que puede ser,en vez de un timer esta en un case "captura" que se envia al dar al boton start y se vuelve a enviar despues del msgbox,eso he cambiado y nada,igual.
Has probado mi code,si te va a ti?
O si tiene errores,esque joder lo tengo ahi y no lo veo.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 2 Abril 2007, 01:24 am
Pues puede ser q has puesto case "send" dentro del timer  :o eso tiene q ir el el data arrival del ws 

Aparte de q lo estas haciendo mal de nuevo. Por q usas esto:
Código:
WS.SendData "yas|" & send & "|" & ya

En vez del interruptor q te e dicho? joer si te ayudo por lo menos hazme caso!! no ves q la imagen puede contener entre medias caracteres "|" por lo q al partilos perderias un monton de datos... si embargo si usas el interruptor no!!! imaginate q esto es una imagen en binario:

Código:
sdafsad|dfdsf5sd4f|sd4f@||||||||||lsjdvfsd5f4||svds|474

No ves q al llegar al server va a partir el chorizo ese por el | y vas a perder trozos? usa el interruptor anda...


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 2 Abril 2007, 02:22 am
estuve trabajando con los codigos y logre hacer el mio propio!! estoy muy contento por eso... y creo q se tu error ya q tb lo cometi mientras hacia el mio


Citar
WS.SendData "yas|" & send & "|" & ya

el archivo envia la palabra yas| y una parte de la imagen... luego en otro paquete envia solo la siguiente parte de la imagen por lo que:

Citar
Case "yas"

no se vuelve a cumplir!!  ;D


creo q ese estu problema!! aunque soy muy novato y no se si lo q digo estara bien...


tendrias q hacer como bien dice EON un interruptor
yovaninu lo explica muy bien.. de ahi lo entendi mucho


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 2 Abril 2007, 04:56 am
como pongo una imagen en un picture... o en un image... no se q me conviene para hacer (empezar a hacer) una funcion como la del bifrost... para poder hacer clicks en la pantalla de la victima...


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 13:26 pm
Mi problema es que no es tan sencillo,tengo un array de datos y cuando se hace la conexion envio varios datos,por eso lo hacia con case y todo porque con el codigo de E0N,el lo hace con ws.getdata datos,y luego todo con datos,pero asi a mi creo que no me iria porque tengo un array,por eso el select case sdatos(0) y hago un case,y por eso me va o me cuesta.Lo del interruptor ya lo he hecho y sigue sin irme.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 2 Abril 2007, 15:52 pm
No te funciona por lo q dice vivachapas ;)

Sube la parte del data arrival y te digo. Seguramente hagas ws.getdata datos y luego los partes:
Split (datos, "|")
no??


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 15:56 pm
Código:
Private Sub WS_DataArrival(index As Integer, ByVal bytesTotal As Long)
On Error Resume Next
Dim datos As String
Dim sData() As String
WS(index).GetData datos
sData = Split(datos, "|")

Select Case sData(0)
Case "Conexion"
Gracias y saludos.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 2 Abril 2007, 16:16 pm
Si, asi es como lo suelo usar yo tb. No pasa nada por q partas la cadena, recuerda q la variable datos no esta partido, kedaria asi:

CLIENTE:
Citar
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub Form_Load()
Envio = False
End Sub

Private Sub WS_DataArrival(index As Integer, ByVal bytesTotal As Long)
On Error Resume Next
Dim datos As String
Dim sData() As String

WS(index).GetData datos
sData = Split(datos, "|")

If Envio = True Then
   DataFile = DataFile & datos
   If Len(DataFile) = LenFile Then
       Open "C:\capture2.jpg" For Binary As #1
           Put #1, , DataFile
       Close #1
       DataFile = ""
       MsgBox "El Fichero se a Enviado Correctamente"
       'Ahora lo tendrias q mostrar C:\capture2.jpg en un picture
       Envio = False
   End If
End If

Select Case sData(0)
Case "Tam:"
LenFile = sData(1)
Envio = True
ws.SendData "SendFile"




SERVER:
Citar
'La peticion de imagen ponla dentro del data arrival con la palabra q tu kieras
Private Sub ws_Connect()
ws.SendData "Tam:|" & FileLen("C:\Prueba.txt")
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim sData() As String
Dim datos As String
Dim Send As String

ws.GetData datos
sData = Split(datos, "|")

Select Case sData(0)
Case "SendFile"
'Aki pones el code para q haga la foto y q se guarde en C:\capture.jpg
      Open "C:\capture.jpg" For Binary As #1
        Send = Space(LOF(1))
        Get #1, , Send
      Close #1
ws.SendData Send
End If

End Sub

Ya esta lo unico q tendrias q cambiar seria
Código:
Private Sub ws_Connect()
ws.SendData "Tam:|" & FileLen("C:\Prueba.txt")
End Sub
del server y poerlo en el data arrival, en uno de los case para q de mande la imagen cuando tu kieras ;)


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 16:42 pm
Wua,muchas gracias E0N me va al 100%,funciona de maravilla mil gracias,muchisimas gracias por tu ayuda y tu paciencia.Si te puedo ayudar en algo(no creo)hazmelo saber.
Muchas gracias.
Saludos.
Se puede dar por solucionado.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 2 Abril 2007, 16:57 pm
Menos mal q te funciona xDD por q llevamos 28 respuestas con la mia para transferir un archivo xDD

De nada  ::)


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 17:39 pm
Menos mal q te funciona xDD por q llevamos 28 respuestas con la mia para transferir un archivo xDD

De nada  ::)
jajajaj si me ha costado pero ha salido.
Enga muchas gracias.


Título: Re: Problema enviar archivo
Publicado por: Jareth en 2 Abril 2007, 21:03 pm
Ahora por ejemplo tengo un boton STop,cuando le doy que pare,vale lo he conseguido pero si luego le doy al boton Start no empieza,es por eso si alguien sabe como hacerlo bien,yo lo he hecho con un boolean que cambia el valor,al darle stop,se envia "stop|"y en el case "stop" parar=true y en lo de la captura de pantalla pongo if parar=false then y capturar.Pero luego para iniciar,si  pongo en captura parar=true,pues el boton stop no va porque aunque diga que es false lo otro dirá que es true.
No se si se me entiende.
Gracias y espero me puedan ayudar.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 3 Abril 2007, 00:12 am
Mejor azlo con un chacek box. Tendrias q introducirlo justo aki:

CLIENTE:
Citar
If Envio = True Then
   DataFile = DataFile & datos
   If Len(DataFile) = LenFile Then
       Open "C:\capture2.jpg" For Binary As #1
           Put #1, , DataFile
       Close #1
       DataFile = ""
       MsgBox "El Fichero se a Enviado Correctamente"
       'Ahora lo tendrias q mostrar C:\capture2.jpg en un picture
'Una vez se a mostrado tendriamos q hacer una nueva peticion
'Para saber si hacer la peticion o no comprovariamos el estado del check box:
If Check1.Value = 1 Then 'Si esta activo
ws.sendata 'Lo q tu hallas puesto para pedir una foto
End If

       Envio = False
   End If
End If
Asi solo recibirias imagenes cuando este activo el check box ;)


Título: Re: Problema enviar archivo
Publicado por: Jareth en 3 Abril 2007, 00:27 am
Gracias otra vez,he puesto el check en visible=false,cuando das al boto stop su valro es 0 y start 1,asi queda como yo quiero y funciona perfectamente.
Enga muchas gracias otra vez.
Saludos.


Título: Re: Problema enviar archivo
Publicado por: ~~ en 3 Abril 2007, 00:53 am
Lo puedes hacer solo con un boton, juega con su caption, cuando estes recibiendo imagenes q ponga stop y cuando no start por ej, y luuego compruevas If ommand1.caption = "stop" then...


Título: Re: Problema enviar archivo
Publicado por: yovaninu en 5 Abril 2007, 04:01 am
veo un interes amplio por la transferencia de archivos, yo pase por muchos de esos problemas... y saben? un dia me pregunte lo siguiente: ¿cuando este trasladando un archivo desde el servidor al cliente (en conexion inversa) podria haber un boton pausar? ¿y otro para reanudar? ¿y otro para cancelar? y ¿otro para previsualizar? (en caso de que se trate de un archivo media)

me llevó noches y noches de codigo, al final lo logre... asi puedo decsrgar archivos desde el servidor de cualquier tamaño, hablo de cientos de megas, vamos que si hay interes posteo linea a linea el codigo completo y comentado...

haber ideas?


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 5 Abril 2007, 04:04 am
mmm seria un codigo muy interesante... ya q no tendrias q depender de q la victima este siempre conectada o por lo menos hasta q termine de bajar el archivo...


Título: Re: Problema enviar archivo
Publicado por: yovaninu en 5 Abril 2007, 04:11 am
mmm seria un codigo muy interesante... ya q no tendrias q depender de q la victima este siempre conectada o por lo menos hasta q termine de bajar el archivo...
si la victima se desconecta, entonces el cliente detecta tal accion y guarda lo que hasta el momento de la desconexion haya descargado, asi puedes reanudarlo en una proxima conexion o al dia siguiente y terminar de bajar el archivo cuando quieras... en fin  quisiera chincheta  ;D ;D ;D ;D ;D ;D


Título: Re: Problema enviar archivo
Publicado por: ~~ en 5 Abril 2007, 12:58 pm
Podias ponerlo, a mi me interesa saber como leer un archivo de 2GB por ej y q el VB no se pete, como lo haces tu?


Título: Re: Problema enviar archivo
Publicado por: yovaninu en 5 Abril 2007, 17:58 pm
Podias ponerlo, a mi me interesa saber como leer un archivo de 2GB por ej y q el VB no se pete, como lo haces tu?

Justamente esa es la idea mala que tenemos hasta ahora de transferir el archivo, es decir pasar tooooodo el archivo a una variable y despues transferirlo, y claro viene las imaginaciones malevolas por cierto de decir como paso 80GB a una variable sin que el basic se cuelgue, pues no necesariamente debes pasar lo 80GB del archivo a una variable... y este es el secreto... el tamaño archivo se debe dividir en partes (en cuantas sea necesario) y extraer solo esos tamaños o poriones a una variable lo que es mas razonable que pasar todo el archivo a una variable para luego transferirlos, puedes dividirlo en 10, 100, 1000, o 5000 partes y cada pedazo transferirlo sin problemas. Yo un archivo de mas de 100MB lo divido en 4096 partes aunque puedo elegir ese valor.... esto es 104857600 / 4096 = 25600bytes osea casi 25KB, esos 25 kb a una variable y  esa variable se procede a transferir hasta terminar... si sobra bytes tambien eso se controla, este es el secreto que uso, asi que por teoria ningun archivo asi sea este de 100TB no deberia colgar al basic, aunque quien sabe.

Un Saludo.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 5 Abril 2007, 20:22 pm
es una excelente forma.. pero como haces a meter un archivo
(por ej: "C:\archivo.exe") de 100 mb en mas de una variable??


Título: Re: Problema enviar archivo
Publicado por: ~~ en 6 Abril 2007, 01:17 am
Podias ponerlo, a mi me interesa saber como leer un archivo de 2GB por ej y q el VB no se pete, como lo haces tu?

Justamente esa es la idea mala que tenemos hasta ahora de transferir el archivo, es decir pasar tooooodo el archivo a una variable y despues transferirlo, y claro viene las imaginaciones malevolas por cierto de decir como paso 80GB a una variable sin que el basic se cuelgue, pues no necesariamente debes pasar lo 80GB del archivo a una variable... y este es el secreto... el tamaño archivo se debe dividir en partes (en cuantas sea necesario) y extraer solo esos tamaños o poriones a una variable lo que es mas razonable que pasar todo el archivo a una variable para luego transferirlos, puedes dividirlo en 10, 100, 1000, o 5000 partes y cada pedazo transferirlo sin problemas. Yo un archivo de mas de 100MB lo divido en 4096 partes aunque puedo elegir ese valor.... esto es 104857600 / 4096 = 25600bytes osea casi 25KB, esos 25 kb a una variable y  esa variable se procede a transferir hasta terminar... si sobra bytes tambien eso se controla, este es el secreto que uso, asi que por teoria ningun archivo asi sea este de 100TB no deberia colgar al basic, aunque quien sabe.

Un Saludo.

Si la historia es esa. Yo cuando subo archivos los suele subir de 10 en 10 bits para poner la barra de progreso, pero primero lo leo entero

La cuestion es, al abrir desde VB (open "C:\...) un archivo de 80GB (simplemente usar la orden open) no se te revienta el programa??


Título: Re: Problema enviar archivo
Publicado por: yovaninu en 6 Abril 2007, 03:27 am
mira no se si realmente tendras un archivo de 2GB o 2TB o 1BB, me e tomado la molestia de buscar el archivo mas grande de mi PC y encontré uno de casi 800MB, le puse este código:

Código:
Open "E:\Archivos de programa\eMule\Incoming1\3dsmax 500 Modelos y Texturas.zip" For Binary As #1
Close #1
MsgBox "pasó"
y el basic sigue de lo mas normal...  :D


asi que creo que la resp a tu pregunta es que al menos por debajo de 1 GB el open no "revienta" al basic... ¿alquien tiene archivos de mas de 1GB pa probar ;D ;D ;D ;D ;D ;D?


Título: Re: Problema enviar archivo
Publicado por: ~~ en 6 Abril 2007, 12:41 pm
Pero nos vas a decir como leerlo sin q reviente o no?


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 6 Abril 2007, 17:55 pm
como hacen para pasar de a 10 bites... o mas o menos.. yo simplemente pongo ws.senddata file... y lo envia como puede.. o como este por defecto...
y como ponen un archivo en varias string... ¿? :huh:


Título: Re: Problema enviar archivo
Publicado por: ~~ en 7 Abril 2007, 13:34 pm
Al obtener el archivo entero piensa q es una cadena xD por lo q puedes trabajar con el como tal:

Código:
    For o = 1 To Len(Todo) 'Leemos el archivo de 10 en 10 bit's
        Parte = Mid(Todo, o, 10)
        o = o + 9
        ws.SendData Parte 'Enviamos los 10 bit's
    Next o

todo es el archivo entero  ;)


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 7 Abril 2007, 17:53 pm
bien.. creo q lo entendi mas o menos...

Citar
Parte = Mid(Todo, o, 10)

el 10 es de 10 bites... osea q si quiero pasar de a 5 por ejemplo pongo 5 ¿?

y a este no lo entendi...

Citar
o = o + 9

no tendria q ser mas 10¿?


Título: Re: Problema enviar archivo
Publicado por: ~~ en 8 Abril 2007, 12:29 pm
No  :xD pruevalo y veras como tiene q ser 9, si pones 10 pierdes datos. Tambien puedes usar step:

Código:
For o = 1 To Len(Todo) step 10
        Parte = Mid(Todo, o, 10)
        ws.SendData Parte 'Enviamos los 10 bit's
Next o

1S4ludo


Título: Re: Problema enviar archivo
Publicado por: ZoNike en 8 Abril 2007, 22:10 pm
tengo un problemilla con el codigo.. porfa aber si alguien me puede ayudar.. gracias.

SERVIDOR:

Código:
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim datosS As String
Winsock1.GetData datosS

If Left(datosS, 7) = "archivo" Then
    dato = Split(datosSS, "|") 'una variable dato (dim dato() as string) se encarga de dividir clave, tamaño y ruta
    filesize = dato(1) 'aqui tengo el tamaño enviado por el cliente
    Winsock1.SendData "enviar" 'ahora si le pido al cliente que envie el archivo en si
    datosSS = ""
End If
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim Datos2 As String
Dim datos As String
Winsock2.GetData datos

   Datos2 = Datos2 & datos 'lo que te decia: juntamos parte por parte el archivo que el cliente esta enviando

    If Len(Datos2) = filesize Then 'si termina
      Open App.Path & "nuevoArchivo.jpg" For Binary As #4 'asumo que envias un JPG, sino vas a tener que usar un CommonDialog en el cliente si quieres usar el mismo nombre de archivo que envias del cliente
       Put #4, 1, Datos2
      Close #4
      Datos2 = "" 'vaceas el buffer
      MsgBox "Archivo Recibido con Éxito." 'vuala, aqui termina todo el proceso y depues de esto supongo que tendras que cargar la imagen recibida a un picture, eso ya es tu trabajo.
    End If
End Sub

CLIENTE:

Código:
Private Sub Timer2_Timer()

SavePicture Picture1.Image, App.Path + "/temp.bmp"

Open App.Path + "/temp.bmp" For Binary As #1
  filedata = Input(LOF(1), 1) 'en esta variable string cargo todo el archivo
 Close #1

filesize = Len(filedata) 'aqui calculo el tamaño de lo que estoy enviando (long) en bytes

If Winsock1.State = "7" Then
Winsock1.SendData "enviar" & "|" & filesize 'envio prmeramente una clave "enviar" luego el tamaño "filesize" y la ruta  "ruta"... (aun no estoy enviando el archivo en si)
End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock1.GetData data
If data = "enviar" Then
Winsock2.SendData filedata
End If
End Sub

Aqui como lo he puesto esta para que funcione con 2 Winsock pero si me lo podeis explicar con 1 solo muxo mejor, gracias x todo espero respuesta. saludos.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 8 Abril 2007, 22:19 pm
pero q problema tienes?? lo quieres hacer con un solo winsock? q es lo q no entiendes... o yo no te entiendo...


Título: Re: Problema enviar archivo
Publicado por: ZoNike en 8 Abril 2007, 22:21 pm
Pues que el codigo en si no me funciona... no recibe nada.


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 8 Abril 2007, 22:42 pm
Citar
dato = Split(datosSS, "|") 'una variable dato (dim dato() as string) se encarga de dividir clave, tamaño y ruta

fijate q datosSS tiene triple ese y aca:

Citar
Dim datosS As String
Citar
If Left(datosS, 7) = "archivo" Then

tiene solo una...


no dimencionas dato...

y bueno... fijate esos errores los encontre cuando lei las primeras lineas...


Título: Re: Problema enviar archivo
Publicado por: DrakoX en 8 Abril 2007, 22:48 pm
ademas, nunk vas a recivier nada,
ya que en el servidor,
el DataArrival esta mal,
ya que pones solo winsock y no winsock1,
como realmente se llama en tu proycto

salu2


Título: Re: Problema enviar archivo
Publicado por: vivachapas en 8 Abril 2007, 22:51 pm
voy a hacer mi propia forma de enviar un archivo, lo pondre aca bien explicado parte por parte para ver si cerramos con este tema ;)


Título: Re: Problema enviar archivo
Publicado por: DrakoX en 8 Abril 2007, 23:00 pm
tienes muchas cosas mal,
tendrias q tener mas cuidado,
al empezar a codear,
presta ams atencion.

salu2